From 10763bd31e2aec2d836a26e1aedc101d6a0f5e2b Mon Sep 17 00:00:00 2001 From: Di Wang Date: Sat, 21 Nov 2015 07:33:29 -0800 Subject: [PATCH] LU-7462 mdd: check object existence Check object existence in mdd_is_parent() and _mdd_lookup(), so the following retrieving attributes will not panic if object does not exist. Signed-off-by: Di Wang Change-Id: Icae243949e202f9d6a4d38b9823373101a093c74 Reviewed-on: http://review.whamcloud.com/17323 Tested-by: Maloo Reviewed-by: Lai Siyao Reviewed-by: Andreas Dilger Tested-by: Andreas Dilger --- lustre/mdd/mdd_dir.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lustre/mdd/mdd_dir.c b/lustre/mdd/mdd_dir.c index db4ddad..7efd9d3 100644 --- a/lustre/mdd/mdd_dir.c +++ b/lustre/mdd/mdd_dir.c @@ -85,11 +85,12 @@ __mdd_lookup(const struct lu_env *env, struct md_object *pobj, if (unlikely(mdd_is_dead_obj(mdd_obj))) RETURN(-ESTALE); + if (!mdd_object_exists(mdd_obj)) + RETURN(-ESTALE); + if (mdd_object_remote(mdd_obj)) { CDEBUG(D_INFO, "%s: Object "DFID" locates on remote server\n", mdd2obd_dev(m)->obd_name, PFID(mdo2fid(mdd_obj))); - } else if (!mdd_object_exists(mdd_obj)) { - RETURN(-ESTALE); } rc = mdd_permission_internal_locked(env, mdd_obj, pattr, mask, @@ -231,6 +232,10 @@ static int mdd_is_parent(const struct lu_env *env, parent = mdd_object_find(env, mdd, pfid); if (IS_ERR(parent)) GOTO(out, rc = PTR_ERR(parent)); + + if (!mdd_object_exists(parent)) + GOTO(out, rc = -EINVAL); + p1 = parent; } EXIT; -- 1.8.3.1