Whamcloud - gitweb
LU-3336 lfsck: namespace visible lost+found directory
[fs/lustre-release.git] / lustre / mdd / mdd_dir.c
index b993174..bef36b5 100644 (file)
@@ -176,6 +176,8 @@ static int mdd_is_parent(const struct lu_env *env,
                        GOTO(out, rc);
                 if (mdd_is_root(mdd, pfid))
                         GOTO(out, rc = 0);
+               if (lu_fid_eq(pfid, &mdd->mdd_local_root_fid))
+                       GOTO(out, rc = 0);
                 if (lu_fid_eq(pfid, lf))
                         GOTO(out, rc = 1);
                 if (parent)
@@ -1500,6 +1502,19 @@ static int mdd_unlink(const struct lu_env *env, struct md_object *pobj,
        if (rc)
                RETURN(rc);
 
+       if (likely(mdd_cobj != NULL)) {
+               /* fetch cattr */
+               rc = mdd_la_get(env, mdd_cobj, cattr, BYPASS_CAPA);
+               if (rc)
+                       RETURN(rc);
+
+               is_dir = S_ISDIR(cattr->la_mode);
+       }
+
+       rc = mdd_unlink_sanity_check(env, mdd_pobj, pattr, mdd_cobj, cattr);
+       if (rc)
+                RETURN(rc);
+
        handle = mdd_trans_create(env, mdd);
        if (IS_ERR(handle))
                RETURN(PTR_ERR(handle));
@@ -1513,21 +1528,9 @@ static int mdd_unlink(const struct lu_env *env, struct md_object *pobj,
        if (rc)
                GOTO(stop, rc);
 
-       if (likely(mdd_cobj != NULL)) {
+       if (likely(mdd_cobj != NULL))
                mdd_write_lock(env, mdd_cobj, MOR_TGT_CHILD);
 
-               /* fetch cattr */
-               rc = mdd_la_get(env, mdd_cobj, cattr, BYPASS_CAPA);
-               if (rc)
-                       GOTO(cleanup, rc);
-
-               is_dir = S_ISDIR(cattr->la_mode);
-       }
-
-       rc = mdd_unlink_sanity_check(env, mdd_pobj, pattr, mdd_cobj, cattr);
-       if (rc)
-               GOTO(cleanup, rc);
-
        if (likely(no_name == 0)) {
                rc = __mdd_index_delete(env, mdd_pobj, name, is_dir, handle,
                                        mdd_object_capa(env, mdd_pobj));