From e88e15f4513801c2a279fe7ff7631e972d0a23d4 Mon Sep 17 00:00:00 2001 From: nasf Date: Fri, 25 Mar 2011 13:17:49 +0800 Subject: [PATCH] ORNL-2 MDS only processes child lock for getattr-by-fid Change-Id: I4fd46761702f13173f43c83e1d76ff4b0478e786 Signed-off-by: nasf Reviewed-on: http://review.whamcloud.com/365 Reviewed-by: wangdi Tested-by: Hudson Reviewed-by: Oleg Drokin --- lustre/mdt/mdt_handler.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 0a86137..f97bf96 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -818,7 +818,7 @@ static int mdt_getattr_name_lock(struct mdt_thread_info *info, struct lu_name *lname = NULL; const char *name = NULL; int namelen = 0; - struct mdt_lock_handle *lhp; + struct mdt_lock_handle *lhp = NULL; struct ldlm_lock *lock; struct ldlm_res_id *res_id; int is_resent; @@ -924,16 +924,15 @@ static int mdt_getattr_name_lock(struct mdt_thread_info *info, RETURN(rc); } - /* step 1: lock parent */ - lhp = &info->mti_lh[MDT_LH_PARENT]; - mdt_lock_pdo_init(lhp, LCK_PR, name, namelen); - rc = mdt_object_lock(info, parent, lhp, MDS_INODELOCK_UPDATE, - MDT_LOCAL_LOCK); - - if (unlikely(rc != 0)) - RETURN(rc); - if (lname) { + /* step 1: lock parent */ + lhp = &info->mti_lh[MDT_LH_PARENT]; + mdt_lock_pdo_init(lhp, LCK_PR, name, namelen); + rc = mdt_object_lock(info, parent, lhp, MDS_INODELOCK_UPDATE, + MDT_LOCAL_LOCK); + if (unlikely(rc != 0)) + RETURN(rc); + /* step 2: lookup child's fid by name */ rc = mdo_lookup(info->mti_env, next, lname, child_fid, &info->mti_spec); @@ -1057,7 +1056,8 @@ relock: out_child: mdt_object_put(info->mti_env, child); out_parent: - mdt_object_unlock(info, parent, lhp, 1); + if (lhp) + mdt_object_unlock(info, parent, lhp, 1); return rc; } -- 1.8.3.1