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>
This commit is contained in:
Chuck Lever
2006-08-22 20:06:23 -04:00
committed by Trond Myklebust
parent 873101b337
commit 94a6d75320
8 changed files with 59 additions and 42 deletions

View File

@@ -358,8 +358,8 @@ struct nfs_symlinkargs {
struct nfs_fh * fromfh;
const char * fromname;
unsigned int fromlen;
const char * topath;
unsigned int tolen;
struct page ** pages;
unsigned int pathlen;
struct iattr * sattr;
};
@@ -434,8 +434,8 @@ struct nfs3_symlinkargs {
struct nfs_fh * fromfh;
const char * fromname;
unsigned int fromlen;
const char * topath;
unsigned int tolen;
struct page ** pages;
unsigned int pathlen;
struct iattr * sattr;
};
@@ -533,7 +533,10 @@ struct nfs4_accessres {
struct nfs4_create_arg {
u32 ftype;
union {
struct qstr * symlink; /* NF4LNK */
struct {
struct page ** pages;
unsigned int len;
} symlink; /* NF4LNK */
struct {
u32 specdata1;
u32 specdata2;
@@ -793,8 +796,8 @@ struct nfs_rpc_ops {
int (*rename) (struct inode *, struct qstr *,
struct inode *, struct qstr *);
int (*link) (struct inode *, struct inode *, struct qstr *);
int (*symlink) (struct inode *, struct dentry *, struct qstr *,
struct iattr *);
int (*symlink) (struct inode *, struct dentry *, struct page *,
unsigned int, struct iattr *);
int (*mkdir) (struct inode *, struct dentry *, struct iattr *);
int (*rmdir) (struct inode *, struct qstr *);
int (*readdir) (struct dentry *, struct rpc_cred *,