break;
ltd->ltd_layout_gen = llmd->llmd_touch_gen;
- list_del(<d->ltd_layout_phase_list);
- list_add_tail(<d->ltd_layout_phase_list, head);
+ list_move_tail(<d->ltd_layout_phase_list, head);
atomic_inc(<d->ltd_ref);
laia->laia_ltd = ltd;
spin_unlock(<ds->ltd_lock);
break;
ltd->ltd_layout_gen = llmd->llmd_touch_gen;
- list_del_init(<d->ltd_layout_phase_list);
- list_add_tail(<d->ltd_layout_phase_list,
- &llmd->llmd_mdt_phase1_list);
+ list_move_tail(<d->ltd_layout_phase_list,
+ &llmd->llmd_mdt_phase1_list);
atomic_inc(<d->ltd_ref);
laia->laia_ltd = ltd;
spin_unlock(<ds->ltd_lock);
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 };
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);
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);
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);
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);
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);
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. */
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. */
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);
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);
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;
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);
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);