Whamcloud - gitweb
LU-5914 lfsck: dt_lookup() LBUG
[fs/lustre-release.git] / lustre / lfsck / lfsck_striped_dir.c
index c42d233..6b3f69d 100644 (file)
@@ -1728,6 +1728,9 @@ int lfsck_namespace_verify_stripe_slave(const struct lu_env *env,
                GOTO(out, rc);
        }
 
+       if (unlikely(!dt_try_as_dir(env, parent)))
+               GOTO(out, rc = -ENOTDIR);
+
        rc = lfsck_read_stripe_lmv(env, parent, plmv);
        if (rc != 0) {
                int rc1;
@@ -1935,8 +1938,11 @@ int lfsck_namespace_striped_dir_rescan(const struct lu_env *env,
                cname = lfsck_name_get_const(env, info->lti_tmpbuf, len);
                memcpy(lnr->lnr_name, info->lti_tmpbuf, len);
 
-               obj = lfsck_object_find_bottom(env, lfsck, cfid);
+               obj = lfsck_object_find_bottom_nowait(env, lfsck, cfid);
                if (IS_ERR(obj)) {
+                       if (lfsck_is_dead_obj(dir))
+                               RETURN(0);
+
                        rc1 = PTR_ERR(obj);
                        goto next;
                }
@@ -2241,9 +2247,13 @@ int lfsck_namespace_handle_striped_master(const struct lu_env *env,
                dev = ltd->ltd_tgt;
        }
 
-       obj = lfsck_object_find_by_dev(env, dev, &lnr->lnr_fid);
-       if (IS_ERR(obj))
+       obj = lfsck_object_find_by_dev_nowait(env, dev, &lnr->lnr_fid);
+       if (IS_ERR(obj)) {
+               if (lfsck_is_dead_obj(dir))
+                       RETURN(0);
+
                GOTO(fail_lmv, rc = PTR_ERR(obj));
+       }
 
        if (!dt_object_exists(obj)) {
                stripe = lfsck_shard_name_to_index(env, lnr->lnr_name,