aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/vfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfsd/vfs.c')
-rw-r--r--fs/nfsd/vfs.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 84ce601d8063..a6bc8a7423db 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -1912,6 +1912,7 @@ struct buffered_dirent {
1912}; 1912};
1913 1913
1914struct readdir_data { 1914struct readdir_data {
1915 struct dir_context ctx;
1915 char *dirent; 1916 char *dirent;
1916 size_t used; 1917 size_t used;
1917 int full; 1918 int full;
@@ -1943,13 +1944,15 @@ static int nfsd_buffered_filldir(void *__buf, const char *name, int namlen,
1943static __be32 nfsd_buffered_readdir(struct file *file, filldir_t func, 1944static __be32 nfsd_buffered_readdir(struct file *file, filldir_t func,
1944 struct readdir_cd *cdp, loff_t *offsetp) 1945 struct readdir_cd *cdp, loff_t *offsetp)
1945{ 1946{
1946 struct readdir_data buf;
1947 struct buffered_dirent *de; 1947 struct buffered_dirent *de;
1948 int host_err; 1948 int host_err;
1949 int size; 1949 int size;
1950 loff_t offset; 1950 loff_t offset;
1951 struct readdir_data buf = {
1952 .ctx.actor = nfsd_buffered_filldir,
1953 .dirent = (void *)__get_free_page(GFP_KERNEL)
1954 };
1951 1955
1952 buf.dirent = (void *)__get_free_page(GFP_KERNEL);
1953 if (!buf.dirent) 1956 if (!buf.dirent)
1954 return nfserrno(-ENOMEM); 1957 return nfserrno(-ENOMEM);
1955 1958
@@ -1963,7 +1966,7 @@ static __be32 nfsd_buffered_readdir(struct file *file, filldir_t func,
1963 buf.used = 0; 1966 buf.used = 0;
1964 buf.full = 0; 1967 buf.full = 0;
1965 1968
1966 host_err = vfs_readdir(file, nfsd_buffered_filldir, &buf); 1969 host_err = iterate_dir(file, &buf.ctx);
1967 if (buf.full) 1970 if (buf.full)
1968 host_err = 0; 1971 host_err = 0;
1969 1972