diff options
author | Bryan Schumaker <bjschuma@netapp.com> | 2010-10-20 15:44:37 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2010-10-23 15:27:35 -0400 |
commit | 56e4ebf877b6043c289bda32a5a7385b80c17dee (patch) | |
tree | 160ae8d5b5ee3871d02a9f5283187430c9ec5ffe /fs/nfs/nfs4proc.c | |
parent | afa8ccc978c24d8ab22e3b3b8cbd1054c84c070b (diff) |
NFS: readdir with vmapped pages
We can use vmapped pages to read more information from the network at once.
This will reduce the number of calls needed to complete a readdir.
Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
[trondmy: Added #include for linux/vmalloc.h> in fs/nfs/dir.c]
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r-- | fs/nfs/nfs4proc.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index aa771c1af115..cb33c73206e3 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -2823,12 +2823,12 @@ static int nfs4_proc_mkdir(struct inode *dir, struct dentry *dentry, | |||
2823 | } | 2823 | } |
2824 | 2824 | ||
2825 | static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, | 2825 | static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, |
2826 | u64 cookie, struct page *page, unsigned int count, int plus) | 2826 | u64 cookie, struct page **pages, unsigned int count, int plus) |
2827 | { | 2827 | { |
2828 | struct inode *dir = dentry->d_inode; | 2828 | struct inode *dir = dentry->d_inode; |
2829 | struct nfs4_readdir_arg args = { | 2829 | struct nfs4_readdir_arg args = { |
2830 | .fh = NFS_FH(dir), | 2830 | .fh = NFS_FH(dir), |
2831 | .pages = &page, | 2831 | .pages = pages, |
2832 | .pgbase = 0, | 2832 | .pgbase = 0, |
2833 | .count = count, | 2833 | .count = count, |
2834 | .bitmask = NFS_SERVER(dentry->d_inode)->attr_bitmask, | 2834 | .bitmask = NFS_SERVER(dentry->d_inode)->attr_bitmask, |
@@ -2859,14 +2859,14 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, | |||
2859 | } | 2859 | } |
2860 | 2860 | ||
2861 | static int nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, | 2861 | static int nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, |
2862 | u64 cookie, struct page *page, unsigned int count, int plus) | 2862 | u64 cookie, struct page **pages, unsigned int count, int plus) |
2863 | { | 2863 | { |
2864 | struct nfs4_exception exception = { }; | 2864 | struct nfs4_exception exception = { }; |
2865 | int err; | 2865 | int err; |
2866 | do { | 2866 | do { |
2867 | err = nfs4_handle_exception(NFS_SERVER(dentry->d_inode), | 2867 | err = nfs4_handle_exception(NFS_SERVER(dentry->d_inode), |
2868 | _nfs4_proc_readdir(dentry, cred, cookie, | 2868 | _nfs4_proc_readdir(dentry, cred, cookie, |
2869 | page, count, plus), | 2869 | pages, count, plus), |
2870 | &exception); | 2870 | &exception); |
2871 | } while (exception.retry); | 2871 | } while (exception.retry); |
2872 | return err; | 2872 | return err; |