Commit 6140f1d4 authored by Max Kellermann's avatar Max Kellermann Committed by Ilya Dryomov
Browse files

libceph: add empty check to ceph_con_get_out_msg()



This moves the list_empty() checks from the two callers (v1 and v2)
into the base messenger.c library.  Now the v1/v2 specializations do
not need to know about con->out_queue; that implementation detail is
now hidden behind the ceph_con_get_out_msg() function.

[ idryomov: instead of changing prepare_write_message() to return
  a bool, move ceph_con_get_out_msg() call out to arrive to the same
  pattern as in messenger_v2.c ]

Signed-off-by: default avatarMax Kellermann <max.kellermann@ionos.com>
Reviewed-by: default avatarViacheslav Dubeyko <Slava.Dubeyko@ibm.com>
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 7399212d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -2114,7 +2114,9 @@ struct ceph_msg *ceph_con_get_out_msg(struct ceph_connection *con)
{
	struct ceph_msg *msg;

	BUG_ON(list_empty(&con->out_queue));
	if (list_empty(&con->out_queue))
		return NULL;

	msg = list_first_entry(&con->out_queue, struct ceph_msg, list_head);
	WARN_ON(msg->con != con);

+4 −6
Original line number Diff line number Diff line
@@ -191,9 +191,9 @@ static void prepare_write_message_footer(struct ceph_connection *con,
/*
 * Prepare headers for the next outgoing message.
 */
static void prepare_write_message(struct ceph_connection *con)
static void prepare_write_message(struct ceph_connection *con,
				  struct ceph_msg *m)
{
	struct ceph_msg *m;
	u32 crc;

	con_out_kvec_reset(con);
@@ -209,8 +209,6 @@ static void prepare_write_message(struct ceph_connection *con)
			&con->v1.out_temp_ack);
	}

	m = ceph_con_get_out_msg(con);

	dout("prepare_write_message %p seq %lld type %d len %d+%d+%zd\n",
	     m, con->out_seq, le16_to_cpu(m->hdr.type),
	     le32_to_cpu(m->hdr.front_len), le32_to_cpu(m->hdr.middle_len),
@@ -1545,8 +1543,8 @@ int ceph_con_v1_try_write(struct ceph_connection *con)
			goto more;
		}
		/* is anything else pending? */
		if (!list_empty(&con->out_queue)) {
			prepare_write_message(con);
		if ((msg = ceph_con_get_out_msg(con)) != NULL) {
			prepare_write_message(con, msg);
			goto more;
		}
		if (con->in_seq > con->in_seq_acked) {
+1 −2
Original line number Diff line number Diff line
@@ -3310,8 +3310,7 @@ static int populate_out_iter(struct ceph_connection *con)
			pr_err("prepare_keepalive2 failed: %d\n", ret);
			return ret;
		}
	} else if (!list_empty(&con->out_queue)) {
		msg = ceph_con_get_out_msg(con);
	} else if ((msg = ceph_con_get_out_msg(con)) != NULL) {
		ret = prepare_message(con, msg);
		if (ret) {
			pr_err("prepare_message failed: %d\n", ret);