]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
refresh (create temporary patch)
authorSean Hefty <sean.hefty@intel.com>
Thu, 28 Jun 2012 19:12:35 +0000 (12:12 -0700)
committerSean Hefty <sean.hefty@intel.com>
Thu, 28 Jun 2012 19:12:35 +0000 (12:12 -0700)
meta
patches/refresh-temp [new file with mode: 0644]

diff --git a/meta b/meta
index ae180009762752f66705cd5f2e444c2f10922cfe..35631e117817e9e8c2306a5759811bc67e69fe23 100644 (file)
--- a/meta
+++ b/meta
@@ -1,8 +1,9 @@
 Version: 1
-Previous: fb010a51dd2f51ef8d8de4d08c93d380060060df
-Head: 9d61edecb21f7e5278feacd56d2f5ca05b422172
+Previous: 9aaab91f96cf062aa00bb9838b24a28910e2f83e
+Head: f56fdbe41ff98d17025ab31f74d83946c20a2d5e
 Applied:
   waitall: 9d61edecb21f7e5278feacd56d2f5ca05b422172
+  refresh-temp: f56fdbe41ff98d17025ab31f74d83946c20a2d5e
 Unapplied:
   v6only-kernel: 56e2b4566930fa7b05debec8b247e8dfe9df7ffe
   rs-1sge: 8ec392829399dec7ed5c608b8697a482e5faa2de
diff --git a/patches/refresh-temp b/patches/refresh-temp
new file mode 100644 (file)
index 0000000..b547403
--- /dev/null
@@ -0,0 +1,123 @@
+Bottom: 1242d5df80aef5749c32bdb6490d768bfdd28ffe
+Top:    b7dfa8c66e1dc86225c445ccf919d88ab1bb492c
+Author: Sean Hefty <sean.hefty@intel.com>
+Date:   2012-06-28 12:12:35 -0700
+
+Refresh of waitall
+
+---
+
+diff --git a/src/rsocket.c b/src/rsocket.c
+index bdb756f..30727fa 100644
+--- a/src/rsocket.c
++++ b/src/rsocket.c
+@@ -1079,7 +1079,7 @@ static int rs_all_sends_done(struct rsocket *rs)
+       return (rs->sqe_avail + rs->ctrl_avail) == rs->sq_size;
+ }
+-static ssize_t rs_peek(struct rsocket *rs, void *buf, size_t len)
++static ssize_t rs_peek(struct rsocket *rs, void **buf, size_t len)
+ {
+       size_t left = len;
+       uint32_t end_size, rsize;
+@@ -1099,15 +1099,15 @@ static ssize_t rs_peek(struct rsocket *rs, void *buf, size_t len)
+               end_size = rs->rbuf_size - rbuf_offset;
+               if (rsize > end_size) {
+-                      memcpy(buf, &rs->rbuf[rbuf_offset], end_size);
++                      memcpy(*buf, &rs->rbuf[rbuf_offset], end_size);
+                       rbuf_offset = 0;
+-                      buf += end_size;
++                      *buf += end_size;
+                       rsize -= end_size;
+                       left -= end_size;
+               }
+-              memcpy(buf, &rs->rbuf[rbuf_offset], rsize);
++              memcpy(*buf, &rs->rbuf[rbuf_offset], rsize);
+               rbuf_offset += rsize;
+-              buf += rsize;
++              *buf += rsize;
+       }
+       return len - left;
+@@ -1133,43 +1133,47 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags)
+               }
+       }
+       fastlock_acquire(&rs->rlock);
+-      if (!rs_have_rdata(rs)) {
+-              ret = rs_get_comp(rs, rs_nonblocking(rs, flags), rs_conn_have_rdata);
+-              if (ret)
+-                      goto out;
+-      }
+-
+-      ret = 0;
+-      if (flags & MSG_PEEK) {
+-              left = len - rs_peek(rs, buf, len);
+-              goto out;
+-      }
++      do {
++              if (!rs_have_rdata(rs)) {
++                      ret = rs_get_comp(rs, rs_nonblocking(rs, flags),
++                                        rs_conn_have_rdata);
++                      if (ret)
++                              break;
++              }
+-      for (; left && rs_have_rdata(rs); left -= rsize) {
+-              if (left < rs->rmsg[rs->rmsg_head].data) {
+-                      rsize = left;
+-                      rs->rmsg[rs->rmsg_head].data -= left;
+-              } else {
+-                      rs->rseq_no++;
+-                      rsize = rs->rmsg[rs->rmsg_head].data;
+-                      if (++rs->rmsg_head == rs->rq_size + 1)
+-                              rs->rmsg_head = 0;
++              ret = 0;
++              if (flags & MSG_PEEK) {
++                      left -= rs_peek(rs, &buf, left);
++                      continue;
+               }
+-              end_size = rs->rbuf_size - rs->rbuf_offset;
+-              if (rsize > end_size) {
+-                      memcpy(buf, &rs->rbuf[rs->rbuf_offset], end_size);
+-                      rs->rbuf_offset = 0;
+-                      buf += end_size;
+-                      rsize -= end_size;
+-                      left -= end_size;
++              for (; left && rs_have_rdata(rs); left -= rsize) {
++                      if (left < rs->rmsg[rs->rmsg_head].data) {
++                              rsize = left;
++                              rs->rmsg[rs->rmsg_head].data -= left;
++                      } else {
++                              rs->rseq_no++;
++                              rsize = rs->rmsg[rs->rmsg_head].data;
++                              if (++rs->rmsg_head == rs->rq_size + 1)
++                                      rs->rmsg_head = 0;
++                      }
++
++                      end_size = rs->rbuf_size - rs->rbuf_offset;
++                      if (rsize > end_size) {
++                              memcpy(buf, &rs->rbuf[rs->rbuf_offset], end_size);
++                              rs->rbuf_offset = 0;
++                              buf += end_size;
++                              rsize -= end_size;
++                              left -= end_size;
++                      }
++                      memcpy(buf, &rs->rbuf[rs->rbuf_offset], rsize);
++                      rs->rbuf_offset += rsize;
++                      buf += rsize;
+               }
+-              memcpy(buf, &rs->rbuf[rs->rbuf_offset], rsize);
+-              rs->rbuf_offset += rsize;
+-              buf += rsize;
+-      }
+-      rs->rbuf_bytes_avail += len - left;
+-out:
++              rs->rbuf_bytes_avail += len - left;
++
++      } while ((flags & MSG_WAITALL) && (rs->state & rs_connect_rd) && left);
++
+       fastlock_release(&rs->rlock);
+       return ret ? ret : len - left;
+ }