diff options
author | Karen Rochford <Karen.Rochford@Sun.COM> | 2010-08-03 16:24:42 -0500 |
---|---|---|
committer | Karen Rochford <Karen.Rochford@Sun.COM> | 2010-08-03 16:24:42 -0500 |
commit | 35bbd6889e6b4f1a266db5cb918141569f92dabe (patch) | |
tree | ff8418227963c48208230737dd13ec6d7234be81 /usr/src/uts/common/rpc | |
parent | 48db32dc9f1b61261d0c3580647e5eca983d6951 (diff) | |
download | illumos-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.c | 8 |
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; |