]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
__dput_to_list(): do decrement of refcount in the callers
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 30 Oct 2023 04:43:48 +0000 (00:43 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 25 Nov 2023 07:33:42 +0000 (02:33 -0500)
... and rename it to to_shrink_list(), seeing that it no longer
does dropping any references

Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/dcache.c

index a00e9ba22480ecbd7e605e3bff9d9e73d0a819ef..0718b3895c129532a69e21f8febba19e59682b0c 100644 (file)
@@ -902,16 +902,13 @@ void dput(struct dentry *dentry)
 }
 EXPORT_SYMBOL(dput);
 
-static void __dput_to_list(struct dentry *dentry, struct list_head *list)
+static void to_shrink_list(struct dentry *dentry, struct list_head *list)
 __must_hold(&dentry->d_lock)
 {
-       if (dentry->d_flags & DCACHE_SHRINK_LIST) {
-               /* let the owner of the list it's on deal with it */
-               --dentry->d_lockref.count;
-       } else {
+       if (!(dentry->d_flags & DCACHE_SHRINK_LIST)) {
                if (dentry->d_flags & DCACHE_LRU_LIST)
                        d_lru_del(dentry);
-               if (!--dentry->d_lockref.count)
+               if (!dentry->d_lockref.count)
                        d_shrink_add(dentry, list);
        }
 }
@@ -925,8 +922,10 @@ void dput_to_list(struct dentry *dentry, struct list_head *list)
        }
        rcu_read_unlock();
        dentry->d_lockref.count = 1;
-       if (!retain_dentry(dentry))
-               __dput_to_list(dentry, list);
+       if (!retain_dentry(dentry)) {
+               --dentry->d_lockref.count;
+               to_shrink_list(dentry, list);
+       }
        spin_unlock(&dentry->d_lock);
 }
 
@@ -1165,8 +1164,10 @@ out:
 static inline void shrink_kill(struct dentry *victim, struct list_head *list)
 {
        struct dentry *parent = victim->d_parent;
-       if (parent != victim)
-               __dput_to_list(parent, list);
+       if (parent != victim) {
+               --parent->d_lockref.count;
+               to_shrink_list(parent, list);
+       }
        __dentry_kill(victim);
 }