Whamcloud - gitweb
LU-4887 lfsck: run all LFSCK scan types by default
[fs/lustre-release.git] / lustre / lfsck / lfsck_layout.c
index cb39f8c..1ccc63b 100644 (file)
@@ -1324,7 +1324,7 @@ static int lfsck_layout_master_query_others(const struct lu_env *env,
        memset(lr, 0, sizeof(*lr));
        lr->lr_index = lfsck_dev_idx(lfsck->li_bottom);
        lr->lr_event = LE_QUERY;
-       lr->lr_active = LT_LAYOUT;
+       lr->lr_active = LFSCK_TYPE_LAYOUT;
        laia->laia_com = com;
        laia->laia_lr = lr;
        laia->laia_shared = 0;
@@ -1418,7 +1418,7 @@ static int lfsck_layout_master_notify_others(const struct lu_env *env,
                RETURN(-ENOMEM);
 
        lr->lr_index = lfsck_dev_idx(lfsck->li_bottom);
-       lr->lr_active = LT_LAYOUT;
+       lr->lr_active = LFSCK_TYPE_LAYOUT;
        laia->laia_com = com;
        laia->laia_lr = lr;
        laia->laia_shared = 0;
@@ -2169,7 +2169,7 @@ static int lfsck_layout_master_conditional_destroy(const struct lu_env *env,
 
        memset(lr, 0, sizeof(*lr));
        lr->lr_event = LE_CONDITIONAL_DESTROY;
-       lr->lr_active = LT_LAYOUT;
+       lr->lr_active = LFSCK_TYPE_LAYOUT;
        lr->lr_fid = *fid;
 
        tmp = req_capsule_client_get(&req->rq_pill, &RMF_LFSCK_REQUEST);
@@ -3854,7 +3854,7 @@ lfsck_layout_slave_query_master(const struct lu_env *env,
        memset(lr, 0, sizeof(*lr));
        lr->lr_index = lfsck_dev_idx(lfsck->li_bottom);
        lr->lr_event = LE_QUERY;
-       lr->lr_active = LT_LAYOUT;
+       lr->lr_active = LFSCK_TYPE_LAYOUT;
 
        llsd->llsd_touch_gen++;
        spin_lock(&llsd->llsd_lock);
@@ -3923,7 +3923,7 @@ lfsck_layout_slave_notify_master(const struct lu_env *env,
        lr->lr_flags = LEF_FROM_OST;
        lr->lr_status = result;
        lr->lr_index = lfsck_dev_idx(lfsck->li_bottom);
-       lr->lr_active = LT_LAYOUT;
+       lr->lr_active = LFSCK_TYPE_LAYOUT;
        llsd->llsd_touch_gen++;
        spin_lock(&llsd->llsd_lock);
        while (!list_empty(&llsd->llsd_master_list)) {
@@ -4100,7 +4100,7 @@ static int lfsck_layout_slave_check_pairs(const struct lu_env *env,
        lr = req_capsule_client_get(&req->rq_pill, &RMF_LFSCK_REQUEST);
        memset(lr, 0, sizeof(*lr));
        lr->lr_event = LE_PAIRS_VERIFY;
-       lr->lr_active = LT_LAYOUT;
+       lr->lr_active = LFSCK_TYPE_LAYOUT;
        lr->lr_fid = *cfid; /* OST-object itself FID. */
        lr->lr_fid2 = *pfid; /* The claimed parent FID. */
 
@@ -5550,7 +5550,7 @@ static int lfsck_layout_master_stop_notify(const struct lu_env *env,
        memset(lr, 0, sizeof(*lr));
        lr->lr_index = lfsck_dev_idx(lfsck->li_bottom);
        lr->lr_event = LE_PEER_EXIT;
-       lr->lr_active = LT_LAYOUT;
+       lr->lr_active = LFSCK_TYPE_LAYOUT;
        lr->lr_status = LS_CO_PAUSED;
        if (ltds == &lfsck->li_ost_descs)
                lr->lr_flags = LEF_TO_OST;
@@ -5588,10 +5588,17 @@ static int lfsck_layout_slave_join(const struct lu_env *env,
        int                               rc    = 0;
        ENTRY;
 
-       if (!lsp->lsp_index_valid || start == NULL ||
-           !(start->ls_flags & LPF_ALL_TGT) ||
-           !(lfsck->li_bookmark_ram.lb_param & LPF_ALL_TGT))
-               RETURN(-EALREADY);
+       if (start == NULL || !(start->ls_flags & LPF_ORPHAN))
+               RETURN(0);
+
+       if (!lsp->lsp_index_valid)
+               RETURN(-EINVAL);
+
+       /* If someone is running the LFSCK without orphan handling,
+        * it will not maintain the object accessing rbtree. So we
+        * cannot join it for orphan handling. */
+       if (!llsd->llsd_rbtree_valid)
+               RETURN(-EBUSY);
 
        spin_unlock(&lfsck->li_lock);
        rc = lfsck_layout_llst_add(llsd, lsp->lsp_index);
@@ -5662,7 +5669,7 @@ int lfsck_layout_setup(const struct lu_env *env, struct lfsck_instance *lfsck)
        init_rwsem(&com->lc_sem);
        atomic_set(&com->lc_ref, 1);
        com->lc_lfsck = lfsck;
-       com->lc_type = LT_LAYOUT;
+       com->lc_type = LFSCK_TYPE_LAYOUT;
        if (lfsck->li_master) {
                struct lfsck_layout_master_data *llmd;
 
@@ -5930,7 +5937,7 @@ static struct dt_it *lfsck_orphan_it_init(const struct lu_env *env,
        if (unlikely(lfsck == NULL))
                RETURN(ERR_PTR(-ENXIO));
 
-       com = lfsck_component_find(lfsck, LT_LAYOUT);
+       com = lfsck_component_find(lfsck, LFSCK_TYPE_LAYOUT);
        if (unlikely(com == NULL))
                GOTO(out, rc = -ENOENT);