diff options
| author | Miklos Szeredi <mszeredi@redhat.com> | 2025-11-03 14:10:38 +0100 |
|---|---|---|
| committer | Miklos Szeredi <mszeredi@redhat.com> | 2025-11-12 11:45:03 +0100 |
| commit | 66c6a77e00a2f28330cca90c67339111cd54e54b (patch) | |
| tree | e6d314834817072223ce4dd7a7e3ccd271bc7c0d | |
| parent | 2a36511609cc7c4817c0998d4651f8c188a6db18 (diff) | |
fuse: add WARN_ON and comment for RCU revalidate
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
| -rw-r--r-- | fs/overlayfs/super.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 43ee4c7296a7..a153f449e2ad 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -128,9 +128,17 @@ static int ovl_dentry_revalidate_common(struct dentry *dentry, unsigned int i; int ret = 1; - /* Careful in RCU mode */ - if (!inode) + if (!inode) { + /* + * Lookup of negative dentries will call ovl_dentry_init_flags() + * with NULL upperdentry and NULL oe, resulting in the + * DCACHE_OP*_REVALIDATE flags being cleared. Hence the only + * way to get a negative inode is due to a race with dentry + * destruction. + */ + WARN_ON(!(flags & LOOKUP_RCU)); return -ECHILD; + } oe = OVL_I_E(inode); lowerstack = ovl_lowerstack(oe); |