From 1088a6408ce197bef7ba04b32e6b034e95d6d2c1 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sun, 15 Apr 2018 18:31:03 -0400 Subject: dput(): turn into explicit while() loop No need to mess with gotos when the code yielded by straight while() isn't any worse... Signed-off-by: Al Viro --- fs/dcache.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) (limited to 'fs/dcache.c') diff --git a/fs/dcache.c b/fs/dcache.c index fd4c6de17b94..c4d2234eccc3 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -828,29 +828,24 @@ static inline bool fast_dput(struct dentry *dentry) */ void dput(struct dentry *dentry) { - if (unlikely(!dentry)) - return; + while (dentry) { + might_sleep(); -repeat: - might_sleep(); + rcu_read_lock(); + if (likely(fast_dput(dentry))) { + rcu_read_unlock(); + return; + } - rcu_read_lock(); - if (likely(fast_dput(dentry))) { + /* Slow case: now with the dentry lock held */ rcu_read_unlock(); - return; - } - /* Slow case: now with the dentry lock held */ - rcu_read_unlock(); - - if (likely(retain_dentry(dentry))) { - spin_unlock(&dentry->d_lock); - return; - } + if (likely(retain_dentry(dentry))) { + spin_unlock(&dentry->d_lock); + return; + } - dentry = dentry_kill(dentry); - if (dentry) { - goto repeat; + dentry = dentry_kill(dentry); } } EXPORT_SYMBOL(dput); -- cgit