Commit 590b7431 authored by J. Bruce Fields's avatar J. Bruce Fields

nfsd4: minor read_buf cleanup

The code to step to the next page seems reasonably self-contained.
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 24750082
...@@ -139,6 +139,19 @@ xdr_error: \ ...@@ -139,6 +139,19 @@ xdr_error: \
} \ } \
} while (0) } while (0)
static void next_decode_page(struct nfsd4_compoundargs *argp)
{
argp->pagelist++;
argp->p = page_address(argp->pagelist[0]);
if (argp->pagelen < PAGE_SIZE) {
argp->end = argp->p + (argp->pagelen>>2);
argp->pagelen = 0;
} else {
argp->end = argp->p + (PAGE_SIZE>>2);
argp->pagelen -= PAGE_SIZE;
}
}
static __be32 *read_buf(struct nfsd4_compoundargs *argp, u32 nbytes) static __be32 *read_buf(struct nfsd4_compoundargs *argp, u32 nbytes)
{ {
/* We want more bytes than seem to be available. /* We want more bytes than seem to be available.
...@@ -166,16 +179,7 @@ static __be32 *read_buf(struct nfsd4_compoundargs *argp, u32 nbytes) ...@@ -166,16 +179,7 @@ static __be32 *read_buf(struct nfsd4_compoundargs *argp, u32 nbytes)
* guarantee p points to at least nbytes bytes. * guarantee p points to at least nbytes bytes.
*/ */
memcpy(p, argp->p, avail); memcpy(p, argp->p, avail);
/* step to next page */ next_decode_page(argp);
argp->pagelist++;
argp->p = page_address(argp->pagelist[0]);
if (argp->pagelen < PAGE_SIZE) {
argp->end = argp->p + (argp->pagelen>>2);
argp->pagelen = 0;
} else {
argp->end = argp->p + (PAGE_SIZE>>2);
argp->pagelen -= PAGE_SIZE;
}
memcpy(((char*)p)+avail, argp->p, (nbytes - avail)); memcpy(((char*)p)+avail, argp->p, (nbytes - avail));
argp->p += XDR_QUADLEN(nbytes - avail); argp->p += XDR_QUADLEN(nbytes - avail);
return p; return p;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment