diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2006-08-22 20:06:23 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-09-22 23:24:53 -0400 |
commit | 94a6d75320b3681e6e728b70e18bd186cb55e682 (patch) | |
tree | 0957071549d76ceb3857e419998818b11bce7269 /include/linux | |
parent | 873101b33776780d32610fc4c90c7358a5e98f51 (diff) |
NFS: Use cached page as buffer for NFS symlink requests
Now that we have a copy of the symlink path in the page cache, we can pass
a struct page down to the XDR routines instead of a string buffer.
Test plan:
Connectathon, all NFS versions.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/nfs_xdr.h | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index ddf5d75e97a2..dc5397d9d23c 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -358,8 +358,8 @@ struct nfs_symlinkargs { | |||
358 | struct nfs_fh * fromfh; | 358 | struct nfs_fh * fromfh; |
359 | const char * fromname; | 359 | const char * fromname; |
360 | unsigned int fromlen; | 360 | unsigned int fromlen; |
361 | const char * topath; | 361 | struct page ** pages; |
362 | unsigned int tolen; | 362 | unsigned int pathlen; |
363 | struct iattr * sattr; | 363 | struct iattr * sattr; |
364 | }; | 364 | }; |
365 | 365 | ||
@@ -434,8 +434,8 @@ struct nfs3_symlinkargs { | |||
434 | struct nfs_fh * fromfh; | 434 | struct nfs_fh * fromfh; |
435 | const char * fromname; | 435 | const char * fromname; |
436 | unsigned int fromlen; | 436 | unsigned int fromlen; |
437 | const char * topath; | 437 | struct page ** pages; |
438 | unsigned int tolen; | 438 | unsigned int pathlen; |
439 | struct iattr * sattr; | 439 | struct iattr * sattr; |
440 | }; | 440 | }; |
441 | 441 | ||
@@ -533,7 +533,10 @@ struct nfs4_accessres { | |||
533 | struct nfs4_create_arg { | 533 | struct nfs4_create_arg { |
534 | u32 ftype; | 534 | u32 ftype; |
535 | union { | 535 | union { |
536 | struct qstr * symlink; /* NF4LNK */ | 536 | struct { |
537 | struct page ** pages; | ||
538 | unsigned int len; | ||
539 | } symlink; /* NF4LNK */ | ||
537 | struct { | 540 | struct { |
538 | u32 specdata1; | 541 | u32 specdata1; |
539 | u32 specdata2; | 542 | u32 specdata2; |
@@ -793,8 +796,8 @@ struct nfs_rpc_ops { | |||
793 | int (*rename) (struct inode *, struct qstr *, | 796 | int (*rename) (struct inode *, struct qstr *, |
794 | struct inode *, struct qstr *); | 797 | struct inode *, struct qstr *); |
795 | int (*link) (struct inode *, struct inode *, struct qstr *); | 798 | int (*link) (struct inode *, struct inode *, struct qstr *); |
796 | int (*symlink) (struct inode *, struct dentry *, struct qstr *, | 799 | int (*symlink) (struct inode *, struct dentry *, struct page *, |
797 | struct iattr *); | 800 | unsigned int, struct iattr *); |
798 | int (*mkdir) (struct inode *, struct dentry *, struct iattr *); | 801 | int (*mkdir) (struct inode *, struct dentry *, struct iattr *); |
799 | int (*rmdir) (struct inode *, struct qstr *); | 802 | int (*rmdir) (struct inode *, struct qstr *); |
800 | int (*readdir) (struct dentry *, struct rpc_cred *, | 803 | int (*readdir) (struct dentry *, struct rpc_cred *, |