From 5c012ab404f845b4f9872a57bd3e4fba6d30af29 Mon Sep 17 00:00:00 2001 From: Daniel Rosenberg Date: Wed, 2 Mar 2022 15:18:27 -0800 Subject: [PATCH] ANDROID: fuse-bpf: Invalidate if lower is unhashed If the lower filesystem has deleted a file or folder behind our back, we should drop it as well. Bug: 221093504 Test: atest android.hardware.cts.CameraTest#testJpegThumbnailSize several times in a row Signed-off-by: Daniel Rosenberg Change-Id: Ibd92dea83a82dd7ab21269ae5d2533e4826f5fb7 --- fs/fuse/backing.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fs/fuse/backing.c b/fs/fuse/backing.c index c1e57a06c469..3c38a3c6cd43 100644 --- a/fs/fuse/backing.c +++ b/fs/fuse/backing.c @@ -1055,6 +1055,13 @@ int fuse_revalidate_backing(struct fuse_args *fa, struct inode *dir, struct fuse_dentry *fuse_dentry = get_fuse_dentry(entry); struct dentry *backing_entry = fuse_dentry->backing_path.dentry; + spin_lock(&backing_entry->d_lock); + if (d_unhashed(backing_entry)) { + spin_unlock(&backing_entry->d_lock); + return 0; + } + spin_unlock(&backing_entry->d_lock); + if (unlikely(backing_entry->d_flags & DCACHE_OP_REVALIDATE)) return backing_entry->d_op->d_revalidate(backing_entry, flags); return 1;