Commit 1088a640 authored by Al Viro's avatar Al Viro

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: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 9c5f1d30
...@@ -828,29 +828,24 @@ static inline bool fast_dput(struct dentry *dentry) ...@@ -828,29 +828,24 @@ static inline bool fast_dput(struct dentry *dentry)
*/ */
void dput(struct dentry *dentry) void dput(struct dentry *dentry)
{ {
if (unlikely(!dentry)) while (dentry) {
return; might_sleep();
repeat: rcu_read_lock();
might_sleep(); if (likely(fast_dput(dentry))) {
rcu_read_unlock();
return;
}
rcu_read_lock(); /* Slow case: now with the dentry lock held */
if (likely(fast_dput(dentry))) {
rcu_read_unlock(); rcu_read_unlock();
return;
}
/* Slow case: now with the dentry lock held */ if (likely(retain_dentry(dentry))) {
rcu_read_unlock(); spin_unlock(&dentry->d_lock);
return;
if (likely(retain_dentry(dentry))) { }
spin_unlock(&dentry->d_lock);
return;
}
dentry = dentry_kill(dentry); dentry = dentry_kill(dentry);
if (dentry) {
goto repeat;
} }
} }
EXPORT_SYMBOL(dput); EXPORT_SYMBOL(dput);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment