diff options
Diffstat (limited to 'usr/src/uts/common/fs/nfs/nfs_xdr.c')
| -rw-r--r-- | usr/src/uts/common/fs/nfs/nfs_xdr.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/usr/src/uts/common/fs/nfs/nfs_xdr.c b/usr/src/uts/common/fs/nfs/nfs_xdr.c index 2f461a1d8a..4e37903f5c 100644 --- a/usr/src/uts/common/fs/nfs/nfs_xdr.c +++ b/usr/src/uts/common/fs/nfs/nfs_xdr.c @@ -144,9 +144,30 @@ xdr_writeargs(XDR *xdrs, struct nfswriteargs *wa) wa->wa_begoff = IXDR_GET_U_INT32(ptr); wa->wa_offset = IXDR_GET_U_INT32(ptr); wa->wa_totcount = IXDR_GET_U_INT32(ptr); - if (xdrs->x_ops == &xdrmblk_ops) + wa->wa_mblk = NULL; + wa->wa_data = NULL; + wa->wa_rlist = NULL; + wa->wa_conn = NULL; + if (xdrs->x_ops == &xdrmblk_ops) { return (xdrmblk_getmblk(xdrs, &wa->wa_mblk, &wa->wa_count)); + } else { + if (xdrs->x_ops == &xdrrdmablk_ops) { + if (xdrrdma_getrdmablk(xdrs, + &wa->wa_rlist, + &wa->wa_count, + &wa->wa_conn, + NFS_MAXDATA) == TRUE) + return (xdrrdma_read_from_client( + wa->wa_rlist, + &wa->wa_conn, + wa->wa_count)); + + wa->wa_rlist = NULL; + wa->wa_conn = NULL; + } + } + /* * It is just as efficient to xdr_bytes * an array of unknown length as to inline copy it. |
