From: Sage Weil Date: Thu, 10 Sep 2009 21:57:13 +0000 (-0700) Subject: msgr: be slightly smarter about corking on partial msgs, acks X-Git-Tag: v0.15~78 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=10096bc54522248f4c382e03fee060b666aa76f8;p=ceph.git msgr: be slightly smarter about corking on partial msgs, acks Actually, if MSG_MORE will cork indefinitely, that may not be what we want for write_ack()... :/ --- diff --git a/src/msg/SimpleMessenger.cc b/src/msg/SimpleMessenger.cc index c4158c33d9fb3..2c1955c3b0b7e 100644 --- a/src/msg/SimpleMessenger.cc +++ b/src/msg/SimpleMessenger.cc @@ -1666,7 +1666,7 @@ Message *SimpleMessenger::Pipe::read_message() } -int SimpleMessenger::Pipe::do_sendmsg(int sd, struct msghdr *msg, int len) +int SimpleMessenger::Pipe::do_sendmsg(int sd, struct msghdr *msg, int len, bool more) { while (len > 0) { if (0) { // sanity @@ -1676,7 +1676,7 @@ int SimpleMessenger::Pipe::do_sendmsg(int sd, struct msghdr *msg, int len) assert(l == len); } - int r = ::sendmsg(sd, msg, 0); + int r = ::sendmsg(sd, msg, more ? MSG_MORE : 0); if (r == 0) dout(10) << "do_sendmsg hmm do_sendmsg got r==0!" << dendl; if (r < 0) { @@ -1766,7 +1766,7 @@ int SimpleMessenger::Pipe::write_ack(__u64 seq) msg.msg_iov = msgvec; msg.msg_iovlen = 2; - if (do_sendmsg(sd, &msg, 1 + sizeof(s)) < 0) + if (do_sendmsg(sd, &msg, 1 + sizeof(s), true) < 0) return -1; return 0; } @@ -1848,7 +1848,7 @@ int SimpleMessenger::Pipe::write_message(Message *m) << dendl; if (msg.msg_iovlen >= IOV_MAX-2) { - if (do_sendmsg(sd, &msg, msglen)) + if (do_sendmsg(sd, &msg, msglen, true)) return -1; // and restart the iov diff --git a/src/msg/SimpleMessenger.h b/src/msg/SimpleMessenger.h index 6f8242ba1fd3a..531708ed9ee5e 100644 --- a/src/msg/SimpleMessenger.h +++ b/src/msg/SimpleMessenger.h @@ -160,7 +160,7 @@ private: Message *read_message(); int write_message(Message *m); - int do_sendmsg(int sd, struct msghdr *msg, int len); + int do_sendmsg(int sd, struct msghdr *msg, int len, bool more=false); int write_ack(__u64 s); int write_keepalive();