summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/rpc
diff options
context:
space:
mode:
authorKaren Rochford <Karen.Rochford@Sun.COM>2010-08-03 16:24:42 -0500
committerKaren Rochford <Karen.Rochford@Sun.COM>2010-08-03 16:24:42 -0500
commit35bbd6889e6b4f1a266db5cb918141569f92dabe (patch)
treeff8418227963c48208230737dd13ec6d7234be81 /usr/src/uts/common/rpc
parent48db32dc9f1b61261d0c3580647e5eca983d6951 (diff)
downloadillumos-joyent-35bbd6889e6b4f1a266db5cb918141569f92dabe.tar.gz
6972525 NFS RDMA doesn't always handle iovec structures correctly
Diffstat (limited to 'usr/src/uts/common/rpc')
-rw-r--r--usr/src/uts/common/rpc/xdr_rdma.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/usr/src/uts/common/rpc/xdr_rdma.c b/usr/src/uts/common/rpc/xdr_rdma.c
index 6598178125..3e513b8149 100644
--- a/usr/src/uts/common/rpc/xdr_rdma.c
+++ b/usr/src/uts/common/rpc/xdr_rdma.c
@@ -710,7 +710,7 @@ xdrrdma_control(XDR *xdrs, int request, void *info)
rdma_wlist_conn_info_t *rwcip = NULL;
rdma_chunkinfo_lengths_t *rcilp = NULL;
struct uio *uiop;
- struct clist *rwl = NULL;
+ struct clist *rwl = NULL, *first = NULL;
struct clist *prev = NULL;
switch (request) {
@@ -789,6 +789,8 @@ xdrrdma_control(XDR *xdrs, int request, void *info)
for (i = 0; i < uiop->uio_iovcnt; i++) {
rwl = clist_alloc();
+ if (first == NULL)
+ first = rwl;
rwl->c_len = uiop->uio_iov[i].iov_len;
rwl->u.c_daddr =
(uint64)(uintptr_t)
@@ -811,8 +813,8 @@ xdrrdma_control(XDR *xdrs, int request, void *info)
}
rwl->c_next = NULL;
- xdrp->xp_wcl = rwl;
- *(rcip->rci_clpp) = rwl;
+ xdrp->xp_wcl = first;
+ *(rcip->rci_clpp) = first;
break;