From 7ca47b804c036c6359b0da901b945a281ff34695 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Wed, 26 Mar 2003 18:57:16 -0800 Subject: [PATCH] [PATCH] kNFSd: fix WRITE decoding NFSv4 operations after WRITE are decoded into wr_vec[] pages, thus the argp->pagelen can be non-zero at the end of decoding the WRITE operation. This patch correctly sets argp->pagelen, and correctly advances argp->p after the WRITE operation --- fs/nfsd/nfs4xdr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 715cfb3755412..2cda2a3e26119 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -852,16 +852,16 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write) v++; write->wr_vec[v].iov_base = page_address(argp->pagelist[0]); argp->pagelist++; - if (argp->pagelen >= PAGE_SIZE) { + if (len >= PAGE_SIZE) { write->wr_vec[v].iov_len = PAGE_SIZE; argp->pagelen -= PAGE_SIZE; } else { write->wr_vec[v].iov_len = argp->pagelen; - argp->pagelen = 0; + argp->pagelen -= len; } } argp->end = (u32*) (write->wr_vec[v].iov_base + write->wr_vec[v].iov_len); - argp->p = (u32*) (write->wr_vec[v].iov_base + len); + argp->p = (u32*) (write->wr_vec[v].iov_base + (XDR_QUADLEN(len) << 2)); write->wr_vec[v].iov_len = len; write->wr_vlen = v+1; -- 2.53.0