From c6383473e74262eaf8f822dcb6b28b22b130f364 Mon Sep 17 00:00:00 2001 From: "John L. Hammond" Date: Thu, 12 Nov 2015 09:49:09 -0600 Subject: [PATCH] LU-8821 mdt: avoid double find in mdt_path_current() In mdt_path_current() avoid finding the object we are already holding a reference to. Signed-off-by: John L. Hammond Change-Id: Iae4796047d2c5b02989d29baf2e7620545f7e45c Reviewed-on: https://review.whamcloud.com/23701 Tested-by: Jenkins Reviewed-by: Jinshan Xiong Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- lustre/mdt/mdt_handler.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index db90982..f134fc0 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -5570,9 +5570,14 @@ static int mdt_path_current(struct mdt_thread_info *info, lu_fid_eq(&mdt->mdt_md_root_fid, &fp->gf_fid)) GOTO(out, rc = -ENOENT); - mdt_obj = mdt_object_find(info->mti_env, mdt, tmpfid); - if (IS_ERR(mdt_obj)) - GOTO(out, rc = PTR_ERR(mdt_obj)); + if (lu_fid_eq(mdt_object_fid(obj), tmpfid)) { + mdt_obj = obj; + mdt_object_get(info->mti_env, mdt_obj); + } else { + mdt_obj = mdt_object_find(info->mti_env, mdt, tmpfid); + if (IS_ERR(mdt_obj)) + GOTO(out, rc = PTR_ERR(mdt_obj)); + } if (!mdt_object_exists(mdt_obj)) { mdt_object_put(info->mti_env, mdt_obj); -- 1.8.3.1