]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: be slightly smarter about corking on partial msgs, acks
authorSage Weil <sage@newdream.net>
Thu, 10 Sep 2009 21:57:13 +0000 (14:57 -0700)
committerSage Weil <sage@newdream.net>
Thu, 10 Sep 2009 21:57:13 +0000 (14:57 -0700)
Actually, if MSG_MORE will cork indefinitely, that may not be
what we want for write_ack()... :/

src/msg/SimpleMessenger.cc
src/msg/SimpleMessenger.h

index c4158c33d9fb37dfe284307790b21a0e1231b69f..2c1955c3b0b7eb53d7fe972d48509f854bce1013 100644 (file)
@@ -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
index 6f8242ba1fd3a8c4c9bb096604a3f5ffbcf99881..531708ed9ee5ec81aee3901cca61ab1f24a61f98 100644 (file)
@@ -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();