about summary refs log tree commit homepage
path: root/trywrite.c
diff options
context:
space:
mode:
Diffstat (limited to 'trywrite.c')
-rw-r--r--trywrite.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/trywrite.c b/trywrite.c
index 4680d3c..d19f653 100644
--- a/trywrite.c
+++ b/trywrite.c
@@ -3,6 +3,7 @@
  * License: GPLv3 or later (see COPYING for details)
  */
 #include "cmogstored.h"
+#include "trace.h"
 
 struct mog_wbuf {
         size_t len;
@@ -76,30 +77,32 @@ enum mog_write_state mog_tryflush(int fd, struct mog_wbuf **x)
  */
 void * mog_trywritev(int fd, struct iovec *iov, int iovcnt)
 {
-        ssize_t total = 0;
+        ssize_t len = 0;
         ssize_t w;
         int i;
 
         for (i = 0; i < iovcnt; i++)
-                total += iov[i].iov_len;
+                len += iov[i].iov_len;
 
-        if (total == 0)
+        if (len == 0)
                 return NULL;
 retry:
         w = writev(fd, iov, iovcnt);
 
-        if (w == total) {
+        if (w == len) {
                 return NULL;
         } else if (w < 0) {
                 switch (errno) {
-                case_EAGAIN: return wbuf_newv(total, iov, iovcnt);
+                case_EAGAIN:
+                        TRACE(CMOGSTORED_WRITE_BUFFERED());
+                        return wbuf_newv(len, iov, iovcnt);
                 case EINTR: goto retry;
                 }
                 return MOG_WR_ERROR;
         } else {
                 struct iovec *new_iov = iov;
 
-                total -= w;
+                len -= w;
 
                  /* skip over iovecs we've already written completely */
                 for (i = 0; i < iovcnt; i++, new_iov++) {
@@ -147,7 +150,9 @@ void * mog_trysend(int fd, void *buf, size_t len, off_t more)
 
                         if (w < 0) {
                                 switch (errno) {
-                                case_EAGAIN: return wbuf_new(buf, len);
+                                case_EAGAIN:
+                                        TRACE(CMOGSTORED_WRITE_BUFFERED());
+                                        return wbuf_new(buf, len);
                                 case EINTR: continue;
                                 }
                                 return MOG_WR_ERROR;