aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/dir.c
diff options
context:
space:
mode:
authortrondmy@kernel.org <trondmy@kernel.org>2022-01-18 19:25:42 -0500
committerAnna Schumaker <Anna.Schumaker@Netapp.com>2022-02-02 10:47:13 -0500
commitd9c4e39c1f8f8a8ebaccf00b8f22c14364b2d27e (patch)
tree06b7e41b2f76123eb3c61a2cd571191d525886da /fs/nfs/dir.c
parentLinux 5.17-rc2 (diff)
downloadlinux-dev-d9c4e39c1f8f8a8ebaccf00b8f22c14364b2d27e.tar.xz
linux-dev-d9c4e39c1f8f8a8ebaccf00b8f22c14364b2d27e.zip
NFS: Don't overfill uncached readdir pages
If we're doing an uncached read of the directory, then we ideally want to read only the exact set of entries that will fit in the buffer supplied by the getdents() system call. So unlike the case where we're reading into the page cache, let's send only one READDIR call, before trying to fill up the buffer. Fixes: 35df59d3ef69 ("NFS: Reduce number of RPC calls when doing uncached readdir") Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'fs/nfs/dir.c')
-rw-r--r--fs/nfs/dir.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index 848f3b8fb821..43df0b365b98 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -867,7 +867,8 @@ static int nfs_readdir_xdr_to_array(struct nfs_readdir_descriptor *desc,
status = nfs_readdir_page_filler(desc, entry, pages, pglen,
arrays, narrays);
- } while (!status && nfs_readdir_page_needs_filling(page));
+ } while (!status && nfs_readdir_page_needs_filling(page) &&
+ page_mapping(page));
nfs_readdir_free_pages(pages, array_size);
out: