diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2024-01-11 20:11:35 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2024-01-11 20:11:35 -0800 |
commit | 499aa1ca4eb6602df38afaecb88fc14edf50cdbb (patch) | |
tree | 32ab97c0ab43eea0e313cd1f6ec0b904a689b17b /fs/coda | |
parent | bf4e7080aeed29354cb156a8eb5d221ab2b6a8cc (diff) | |
parent | 1b6ae9f6e6c3e3c35aad0f11b116a81780b8aa03 (diff) | |
download | linux-499aa1ca4eb6602df38afaecb88fc14edf50cdbb.tar.gz linux-499aa1ca4eb6602df38afaecb88fc14edf50cdbb.tar.bz2 linux-499aa1ca4eb6602df38afaecb88fc14edf50cdbb.zip |
Merge tag 'pull-dcache' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull dcache updates from Al Viro:
"Change of locking rules for __dentry_kill(), regularized refcounting
rules in that area, assorted cleanups and removal of weird corner
cases (e.g. now ->d_iput() on child is always called before the parent
might hit __dentry_kill(), etc)"
* tag 'pull-dcache' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (40 commits)
dcache: remove unnecessary NULL check in dget_dlock()
kill DCACHE_MAY_FREE
__d_unalias() doesn't use inode argument
d_alloc_parallel(): in-lookup hash insertion doesn't need an RCU variant
get rid of DCACHE_GENOCIDE
d_genocide(): move the extern into fs/internal.h
simple_fill_super(): don't bother with d_genocide() on failure
nsfs: use d_make_root()
d_alloc_pseudo(): move setting ->d_op there from the (sole) caller
kill d_instantate_anon(), fold __d_instantiate_anon() into remaining caller
retain_dentry(): introduce a trimmed-down lockless variant
__dentry_kill(): new locking scheme
d_prune_aliases(): use a shrink list
switch select_collect{,2}() to use of to_shrink_list()
to_shrink_list(): call only if refcount is 0
fold dentry_kill() into dput()
don't try to cut corners in shrink_lock_dentry()
fold the call of retain_dentry() into fast_dput()
Call retain_dentry() with refcount 0
dentry_kill(): don't bother with retain_dentry() on slow path
...
Diffstat (limited to 'fs/coda')
-rw-r--r-- | fs/coda/cache.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/coda/cache.c b/fs/coda/cache.c index 3b8c4513118f..970f0022ec52 100644 --- a/fs/coda/cache.c +++ b/fs/coda/cache.c @@ -93,13 +93,13 @@ static void coda_flag_children(struct dentry *parent, int flag) struct dentry *de; spin_lock(&parent->d_lock); - list_for_each_entry(de, &parent->d_subdirs, d_child) { + hlist_for_each_entry(de, &parent->d_children, d_sib) { + struct inode *inode = d_inode_rcu(de); /* don't know what to do with negative dentries */ - if (d_inode(de) ) - coda_flag_inode(d_inode(de), flag); + if (inode) + coda_flag_inode(inode, flag); } spin_unlock(&parent->d_lock); - return; } void coda_flag_inode_children(struct inode *inode, int flag) |