From b2d0facce07e734e4aa14653d0ef637dc553cb4a Mon Sep 17 00:00:00 2001 From: Bobi Jam Date: Thu, 24 Nov 2011 07:19:41 +0800 Subject: [PATCH] LU-645 llite: Avoid unnecessary dentry rehashing In patchless case the sequence __d_drop() then d_rehash_cond() creates race window if dentry is already hashed, in this case rehashing should be avoided. Change-Id: I59e035c6d19b869955e66fb010c1b137d0aab0ec Signed-off-by: Bobi Jam Reviewed-on: http://review.whamcloud.com/1434 Tested-by: Hudson Reviewed-by: Fan Yong Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/llite/llite_internal.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h index a7b314b..7b89ca9 100644 --- a/lustre/llite/llite_internal.h +++ b/lustre/llite/llite_internal.h @@ -1361,10 +1361,8 @@ static inline void ll_dentry_rehash(struct dentry *dentry, int locked) cfs_spin_lock(&ll_lookup_lock); spin_lock(&dcache_lock); } - lock_dentry(dentry); - __d_drop(dentry); - unlock_dentry(dentry); - d_rehash_cond(dentry, 0); + if (d_unhashed(dentry)) + d_rehash_cond(dentry, 0); if (!locked) { spin_unlock(&dcache_lock); cfs_spin_unlock(&ll_lookup_lock); -- 1.8.3.1