Skip to content

Commit 90bad5e

Browse files
author
Al Viro
committed
root dentries need RCU-delayed freeing
Since mountpoint crossing can happen without leaving lazy mode, root dentries do need the same protection against having their memory freed without RCU delay as everything else in the tree. It's partially hidden by RCU delay between detaching from the mount tree and dropping the vfsmount reference, but the starting point of pathwalk can be on an already detached mount, in which case umount-caused RCU delay has already passed by the time the lazy pathwalk grabs rcu_read_lock(). If the starting point happens to be at the root of that vfsmount *and* that vfsmount covers the entire filesystem, we get trouble. Fixes: 48a066e ("RCU'd vsfmounts") Cc: stable@vger.kernel.org Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent 9ba546c commit 90bad5e

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

fs/dcache.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1932,10 +1932,12 @@ struct dentry *d_make_root(struct inode *root_inode)
19321932

19331933
if (root_inode) {
19341934
res = d_alloc_anon(root_inode->i_sb);
1935-
if (res)
1935+
if (res) {
1936+
res->d_flags |= DCACHE_RCUACCESS;
19361937
d_instantiate(res, root_inode);
1937-
else
1938+
} else {
19381939
iput(root_inode);
1940+
}
19391941
}
19401942
return res;
19411943
}

0 commit comments

Comments
 (0)