Whamcloud - gitweb
LU-7462 mdd: check object existence 23/17323/3
authorDi Wang <di.wang@intel.com>
Sat, 21 Nov 2015 15:33:29 +0000 (07:33 -0800)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 2 Dec 2015 03:55:38 +0000 (03:55 +0000)
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 <di.wang@intel.com>
Change-Id: Icae243949e202f9d6a4d38b9823373101a093c74
Reviewed-on: http://review.whamcloud.com/17323
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Andreas Dilger <andreas.dilger@intel.com>
lustre/mdd/mdd_dir.c

index db4ddad..7efd9d3 100644 (file)
@@ -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 (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)));
        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,
        }
 
        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));
                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;
                p1 = parent;
         }
         EXIT;