summaryrefslogtreecommitdiff
path: root/include/linux/nfsd
diff options
context:
space:
mode:
authorNeil Brown <neilb@cse.unsw.edu.au>2002-11-21 19:20:01 -0800
committerLinus Torvalds <torvalds@penguin.transmeta.com>2002-11-21 19:20:01 -0800
commit89fc0a31eb36a683d331be8f59bef740141fb2af (patch)
tree13452df616b8e64d39f2305eabcda4d4637bb7b1 /include/linux/nfsd
parent586a5a356afc42a84c13898fcf45c866be190856 (diff)
[PATCH] kNFSd - 1 of 2 - Change NFSv4 xdr decoding to cope with separate pages.
Now that nfsd uses a list of pages for requests instead of one large buffer, NFSv4 need to know about this. The most interesting part of this is that it is possible that section of a request, like a path name, could span two pages, so we need to be able to kmalloc as little bit of space to copy them into, and make sure they get freed later.
Diffstat (limited to 'include/linux/nfsd')
-rw-r--r--include/linux/nfsd/xdr4.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
index 4238cb04ad90..72b7c03dfc1a 100644
--- a/include/linux/nfsd/xdr4.h
+++ b/include/linux/nfsd/xdr4.h
@@ -249,7 +249,9 @@ struct nfsd4_write {
u64 wr_offset; /* request */
u32 wr_stable_how; /* request */
u32 wr_buflen; /* request */
- char * wr_buf; /* request */
+ struct iovec wr_vec[RPCSVC_MAXPAGES]; /* request */
+ int wr_vlen;
+
u32 wr_bytes_written; /* response */
u32 wr_how_written; /* response */
nfs4_verifier wr_verifier; /* response */
@@ -288,6 +290,14 @@ struct nfsd4_compoundargs {
/* scratch variables for XDR decode */
u32 * p;
u32 * end;
+ struct page ** pagelist;
+ int pagelen;
+ u32 tmp[8];
+ u32 * tmpp;
+ struct tmpbuf {
+ struct tmpbuf *next;
+ void *buf;
+ } *to_free;
u32 taglen;
char * tag;