summaryrefslogtreecommitdiff
path: root/fs/fuse/readdir.c
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2022-11-25 22:16:05 +0300
committerMark Brown <broonie@kernel.org>2022-11-25 22:16:05 +0300
commit5cd4d3886780bf9a846eada29a2aefe8bfcac027 (patch)
treeea5cc9b11657912a1371932ad467a7a622e8010c /fs/fuse/readdir.c
parentef3232e3dbd172fa17190fa8a852a3180a73bbdc (diff)
parentf0c4d9fc9cc9462659728d168387191387e903cc (diff)
downloadlinux-5cd4d3886780bf9a846eada29a2aefe8bfcac027.tar.xz
Merge tag 'v6.1-rc4' into spi-6.2
Linux 6.1-rc4 which should get my CI working on RPi3s again.
Diffstat (limited to 'fs/fuse/readdir.c')
-rw-r--r--fs/fuse/readdir.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/fuse/readdir.c b/fs/fuse/readdir.c
index b4e565711045..e8deaacf1832 100644
--- a/fs/fuse/readdir.c
+++ b/fs/fuse/readdir.c
@@ -77,8 +77,10 @@ static void fuse_add_dirent_to_cache(struct file *file,
goto unlock;
addr = kmap_local_page(page);
- if (!offset)
+ if (!offset) {
clear_page(addr);
+ SetPageUptodate(page);
+ }
memcpy(addr + offset, dirent, reclen);
kunmap_local(addr);
fi->rdc.size = (index << PAGE_SHIFT) + offset + reclen;
@@ -516,6 +518,12 @@ retry_locked:
page = find_get_page_flags(file->f_mapping, index,
FGP_ACCESSED | FGP_LOCK);
+ /* Page gone missing, then re-added to cache, but not initialized? */
+ if (page && !PageUptodate(page)) {
+ unlock_page(page);
+ put_page(page);
+ page = NULL;
+ }
spin_lock(&fi->rdc.lock);
if (!page) {
/*