From 54fba8c2a931abf2fdf97b5ddc2548cdb05fa8cc Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 16 Apr 2008 12:56:54 -0700 Subject: [PATCH] kclient: fixed msgr short write bug --- src/kernel/messenger.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/kernel/messenger.c b/src/kernel/messenger.c index 1a4da2d61970b..8f7295437e1b4 100644 --- a/src/kernel/messenger.c +++ b/src/kernel/messenger.c @@ -327,7 +327,8 @@ static int write_partial_kvec(struct ceph_connection *con) while (con->out_kvec_bytes > 0) { ret = ceph_tcp_sendmsg(con->sock, con->out_kvec_cur, con->out_kvec_left, con->out_kvec_bytes); - if (ret <= 0) goto out; + if (ret <= 0) + goto out; con->out_kvec_bytes -= ret; if (con->out_kvec_bytes == 0) break; /* done */ @@ -335,6 +336,7 @@ static int write_partial_kvec(struct ceph_connection *con) if (ret >= con->out_kvec_cur->iov_len) { ret -= con->out_kvec_cur->iov_len; con->out_kvec_cur++; + con->out_kvec_left--; } else { con->out_kvec_cur->iov_len -= ret; con->out_kvec_cur->iov_base += ret; @@ -368,8 +370,8 @@ static int write_partial_msg_pages(struct ceph_connection *con, kv.iov_len = min((int)(PAGE_SIZE - con->out_msg_pos.page_pos), (int)(data_len - con->out_msg_pos.data_pos)); ret = ceph_tcp_sendmsg(con->sock, &kv, 1, kv.iov_len); - if (ret < 0) return ret; - if (ret == 0) return 0; /* socket full */ + if (ret <= 0) + goto out; con->out_msg_pos.data_pos += ret; con->out_msg_pos.page_pos += ret; if (ret == kv.iov_len) { @@ -379,8 +381,11 @@ static int write_partial_msg_pages(struct ceph_connection *con, } /* done */ + dout(30, "write_partial_msg_pages wrote all pages on %p\n", con); con->out_msg = 0; - return 1; + ret = 1; +out: + return ret; } @@ -539,15 +544,6 @@ more: } } - /* check if connect handshake finished.. if not requeue and return.. */ -/* - if (!test_bit(OPEN, &con->state)) { - dout(5, "try_write state = %lu, need to requeue and exit\n", - con->state); - goto done; - } -*/ - /* msg pages? */ if (con->out_msg) { ret = write_partial_msg_pages(con, con->out_msg); -- 2.39.5