From: Sean Hefty Date: Thu, 28 Jun 2012 19:12:35 +0000 (-0700) Subject: refresh (create temporary patch) X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=4447ba519e5a7881ca92ba33575efb0d2780003f;p=~shefty%2Flibrdmacm.git refresh (create temporary patch) --- diff --git a/meta b/meta index ae180009..35631e11 100644 --- 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 index 00000000..b547403c --- /dev/null +++ b/patches/refresh-temp @@ -0,0 +1,123 @@ +Bottom: 1242d5df80aef5749c32bdb6490d768bfdd28ffe +Top: b7dfa8c66e1dc86225c445ccf919d88ab1bb492c +Author: Sean Hefty +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; + }