summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/dcache.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/fs/dcache.c b/fs/dcache.c
index b5604b84bafb..ffaaf48533e6 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -1228,19 +1228,19 @@ void shrink_dentry_list(struct list_head *list)
dentry = list_entry(list->prev, struct dentry, d_lru);
spin_lock(&dentry->d_lock);
+ d_shrink_del(dentry);
+ if (unlikely(dentry->d_flags & DCACHE_DENTRY_KILLED)) {
+ spin_unlock(&dentry->d_lock);
+ dentry_free(dentry);
+ continue;
+ }
rcu_read_lock();
if (!lock_for_kill(dentry)) {
- bool can_free;
- rcu_read_unlock();
- d_shrink_del(dentry);
- can_free = dentry->d_flags & DCACHE_DENTRY_KILLED;
spin_unlock(&dentry->d_lock);
- if (can_free)
- dentry_free(dentry);
- continue;
+ rcu_read_unlock();
+ } else {
+ shrink_kill(dentry);
}
- d_shrink_del(dentry);
- shrink_kill(dentry);
}
}
EXPORT_SYMBOL(shrink_dentry_list);