NFS: Don't overfill uncached readdir pages
authortrondmy@kernel.org <trondmy@kernel.org>
Wed, 19 Jan 2022 00:25:42 +0000 (19:25 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Wed, 2 Feb 2022 15:47:13 +0000 (10:47 -0500)
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>
fs/nfs/dir.c

index 848f3b8fb821914f46fb28ade1fae54ef1b419ec..43df0b365b981e346687694eb97b8b6f5e1e3c80 100644 (file)
@@ -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: