Whamcloud - gitweb
LU-4788 lfsck: replace cfs_list_t with list_head
[fs/lustre-release.git] / lustre / lfsck / lfsck_layout.c
index f59dca7..88ec0e6 100644 (file)
@@ -1358,8 +1358,7 @@ again:
                        break;
 
                ltd->ltd_layout_gen = llmd->llmd_touch_gen;
-               list_del(&ltd->ltd_layout_phase_list);
-               list_add_tail(&ltd->ltd_layout_phase_list, head);
+               list_move_tail(&ltd->ltd_layout_phase_list, head);
                atomic_inc(&ltd->ltd_ref);
                laia->laia_ltd = ltd;
                spin_unlock(&ltds->ltd_lock);
@@ -1567,9 +1566,8 @@ again:
                                break;
 
                        ltd->ltd_layout_gen = llmd->llmd_touch_gen;
-                       list_del_init(&ltd->ltd_layout_phase_list);
-                       list_add_tail(&ltd->ltd_layout_phase_list,
-                                     &llmd->llmd_mdt_phase1_list);
+                       list_move_tail(&ltd->ltd_layout_phase_list,
+                                      &llmd->llmd_mdt_phase1_list);
                        atomic_inc(&ltd->ltd_ref);
                        laia->laia_ltd = ltd;
                        spin_unlock(&ltds->ltd_lock);
@@ -1979,6 +1977,7 @@ static int lfsck_layout_recreate_parent(const struct lu_env *env,
                                        __u32 ea_off)
 {
        struct lfsck_thread_info        *info   = lfsck_env_info(env);
+       struct dt_insert_rec            *dtrec  = &info->lti_dt_rec;
        char                            *name   = info->lti_key;
        struct lu_attr                  *la     = &info->lti_la;
        struct dt_object_format         *dof    = &info->lti_dof;
@@ -2108,8 +2107,10 @@ static int lfsck_layout_recreate_parent(const struct lu_env *env,
                GOTO(stop, rc);
 
        /* 4a. Insert the MDT-object to .lustre/lost+found/MDTxxxx/ */
+       dtrec->rec_fid = pfid;
+       dtrec->rec_type = S_IFREG;
        rc = dt_declare_insert(env, lfsck->li_lpf_obj,
-                              (const struct dt_rec *)pfid,
+                              (const struct dt_rec *)dtrec,
                               (const struct dt_key *)name, th);
        if (rc != 0)
                GOTO(stop, rc);
@@ -2147,8 +2148,7 @@ static int lfsck_layout_recreate_parent(const struct lu_env *env,
                GOTO(stop, rc);
 
        /* 4b. Insert the MDT-object to .lustre/lost+found/MDTxxxx/ */
-       rc = dt_insert(env, lfsck->li_lpf_obj,
-                      (const struct dt_rec *)pfid,
+       rc = dt_insert(env, lfsck->li_lpf_obj, (const struct dt_rec *)dtrec,
                       (const struct dt_key *)name, th, BYPASS_CAPA, 1);
        if (rc != 0)
                GOTO(stop, rc);
@@ -2470,6 +2470,7 @@ static int lfsck_layout_recreate_lovea(const struct lu_env *env,
        struct lfsck_bookmark    *bk            = &lfsck->li_bookmark_ram;
        struct thandle            *handle       = NULL;
        size_t                    buflen        = buf->lb_len;
+       size_t                    lovea_size;
        struct lov_mds_md_v1     *lmm;
        struct lov_ost_data_v1   *objs;
        struct lustre_handle      lh            = { 0 };
@@ -2508,8 +2509,9 @@ again:
        if (rc < 0)
                GOTO(unlock_layout, rc);
 
-       if (buf->lb_len < rc) {
-               lu_buf_realloc(buf, rc);
+       lovea_size = rc;
+       if (buf->lb_len < lovea_size) {
+               lu_buf_realloc(buf, lovea_size);
                buflen = buf->lb_len;
                if (buf->lb_buf == NULL)
                        GOTO(unlock_layout, rc = -ENOMEM);
@@ -2539,11 +2541,12 @@ again:
                LASSERT(rc != 0);
                goto again;
        } else if (rc == -ENODATA || rc == 0) {
-               rc = lov_mds_md_size(ea_off + 1, LOV_MAGIC_V1);
+               lovea_size = lov_mds_md_size(ea_off + 1, LOV_MAGIC_V1);
                /* If the declared is not big enough, re-try. */
-               if (buf->lb_len < rc)
+               if (buf->lb_len < lovea_size) {
+                       rc = lovea_size;
                        goto again;
-
+               }
                fl = LU_XATTR_CREATE;
        } else if (rc < 0) {
                GOTO(unlock_parent, rc);
@@ -2551,15 +2554,16 @@ again:
                goto again;
        } else {
                fl = LU_XATTR_REPLACE;
+               lovea_size = rc;
        }
 
        if (fl == LU_XATTR_CREATE) {
                if (bk->lb_param & LPF_DRYRUN)
                        GOTO(unlock_parent, rc = 1);
 
-               LASSERT(buf->lb_len >= rc);
+               LASSERT(buf->lb_len >= lovea_size);
 
-               buf->lb_len = rc;
+               buf->lb_len = lovea_size;
                rc = lfsck_layout_extend_lovea(env, lfsck, handle, parent, cfid,
                                               buf, fl, ost_idx, ea_off, false);
 
@@ -2574,9 +2578,9 @@ again:
                if (bk->lb_param & LPF_DRYRUN)
                        GOTO(unlock_parent, rc = 1);
 
-               LASSERT(buf->lb_len >= rc);
+               LASSERT(buf->lb_len >= lovea_size);
 
-               buf->lb_len = rc;
+               buf->lb_len = lovea_size;
                memset(lmm, 0, buf->lb_len);
                rc = lfsck_layout_extend_lovea(env, lfsck, handle, parent, cfid,
                                               buf, fl, ost_idx, ea_off, true);
@@ -2610,12 +2614,13 @@ again:
                if (bk->lb_param & LPF_DRYRUN)
                        GOTO(unlock_parent, rc = 1);
 
-               rc = lov_mds_md_size(ea_off + 1, magic);
+               lovea_size = lov_mds_md_size(ea_off + 1, magic);
                /* If the declared is not big enough, re-try. */
-               if (buf->lb_len < rc)
+               if (buf->lb_len < lovea_size) {
+                       rc = lovea_size;
                        goto again;
-
-               buf->lb_len = rc;
+               }
+               buf->lb_len = lovea_size;
                rc = lfsck_layout_extend_lovea(env, lfsck, handle, parent, cfid,
                                               buf, fl, ost_idx, ea_off, false);
 
@@ -2624,7 +2629,7 @@ again:
 
        LASSERTF(rc > 0, "invalid rc = %d\n", rc);
 
-       buf->lb_len = rc;
+       buf->lb_len = lovea_size;
        for (i = 0; i < count; i++, objs++) {
                /* The MDT-object was created via lfsck_layout_recover_create()
                 * by others before, and we fill the dummy layout EA. */
@@ -3800,6 +3805,9 @@ cleanup2:
                rc = rc1;
        }
 
+       /* flush all async updating before exit. */
+       dt_sync(env, lfsck->li_next);
+
        /* Under force exit case, some requests may be just freed without
         * verification, those objects should be re-handled when next run.
         * So not update the on-disk tracing file under such case. */
@@ -3966,9 +3974,8 @@ lfsck_layout_slave_query_master(const struct lu_env *env,
                        break;
 
                llst->llst_gen = llsd->llsd_touch_gen;
-               list_del(&llst->llst_list);
-               list_add_tail(&llst->llst_list,
-                             &llsd->llsd_master_list);
+               list_move_tail(&llst->llst_list,
+                              &llsd->llsd_master_list);
                atomic_inc(&llst->llst_ref);
                spin_unlock(&llsd->llsd_lock);
 
@@ -4045,9 +4052,8 @@ lfsck_layout_slave_notify_master(const struct lu_env *env,
                        break;
 
                llst->llst_gen = llsd->llsd_touch_gen;
-               list_del(&llst->llst_list);
-               list_add_tail(&llst->llst_list,
-                             &llsd->llsd_master_list);
+               list_move_tail(&llst->llst_list,
+                              &llsd->llsd_master_list);
                atomic_inc(&llst->llst_ref);
                spin_unlock(&llsd->llsd_lock);
 
@@ -4445,9 +4451,8 @@ static int lfsck_layout_prep(const struct lu_env *env,
                if (!lfsck->li_drop_dryrun ||
                    lo->ll_pos_first_inconsistent == 0) {
                        lo->ll_status = LS_SCANNING_PHASE2;
-                       list_del_init(&com->lc_link);
-                       list_add_tail(&com->lc_link,
-                                     &lfsck->li_list_double_scan);
+                       list_move_tail(&com->lc_link,
+                                      &lfsck->li_list_double_scan);
                        pos->lp_oit_cookie = 0;
                } else {
                        int i;
@@ -5013,20 +5018,17 @@ static int lfsck_layout_master_post(const struct lu_env *env,
                lo->ll_status = LS_SCANNING_PHASE2;
                lo->ll_flags |= LF_SCANNED_ONCE;
                lo->ll_flags &= ~LF_UPGRADE;
-               list_del_init(&com->lc_link);
-               list_add_tail(&com->lc_link, &lfsck->li_list_double_scan);
+               list_move_tail(&com->lc_link, &lfsck->li_list_double_scan);
        } else if (result == 0) {
                lo->ll_status = lfsck->li_status;
                if (lo->ll_status == 0)
                        lo->ll_status = LS_STOPPED;
                if (lo->ll_status != LS_PAUSED) {
-                       list_del_init(&com->lc_link);
-                       list_add_tail(&com->lc_link, &lfsck->li_list_idle);
+                       list_move_tail(&com->lc_link, &lfsck->li_list_idle);
                }
        } else {
                lo->ll_status = LS_FAILED;
-               list_del_init(&com->lc_link);
-               list_add_tail(&com->lc_link, &lfsck->li_list_idle);
+               list_move_tail(&com->lc_link, &lfsck->li_list_idle);
        }
        spin_unlock(&lfsck->li_lock);
 
@@ -5075,20 +5077,16 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
                        lo->ll_flags &= ~LF_CRASHED_LASTID;
                }
                lo->ll_flags &= ~LF_UPGRADE;
-               list_del_init(&com->lc_link);
-               list_add_tail(&com->lc_link, &lfsck->li_list_double_scan);
+               list_move_tail(&com->lc_link, &lfsck->li_list_double_scan);
        } else if (result == 0) {
                lo->ll_status = lfsck->li_status;
                if (lo->ll_status == 0)
                        lo->ll_status = LS_STOPPED;
-               if (lo->ll_status != LS_PAUSED) {
-                       list_del_init(&com->lc_link);
-                       list_add_tail(&com->lc_link, &lfsck->li_list_idle);
-               }
+               if (lo->ll_status != LS_PAUSED)
+                       list_move_tail(&com->lc_link, &lfsck->li_list_idle);
        } else {
                lo->ll_status = LS_FAILED;
-               list_del_init(&com->lc_link);
-               list_add_tail(&com->lc_link, &lfsck->li_list_idle);
+               list_move_tail(&com->lc_link, &lfsck->li_list_idle);
        }
        spin_unlock(&lfsck->li_lock);