diff --git a/lib/locking/locking.c b/lib/locking/locking.c index e7d8fc8d8..a131eb571 100644 --- a/lib/locking/locking.c +++ b/lib/locking/locking.c @@ -454,7 +454,8 @@ int resume_lvs(struct cmd_context *cmd, struct dm_list *lvs) struct lv_list *lvl; dm_list_iterate_items(lvl, lvs) - resume_lv(cmd, lvl->lv); + if (!resume_lv(cmd, lvl->lv)) + stack; return 1; } @@ -470,7 +471,8 @@ int suspend_lvs(struct cmd_context *cmd, struct dm_list *lvs) log_error("Failed to suspend %s", lvl->lv->name); dm_list_uniterate(lvh, lvs, &lvl->list) { lvl = dm_list_item(lvh, struct lv_list); - resume_lv(cmd, lvl->lv); + if (!resume_lv(cmd, lvl->lv)) + stack; } return 0; diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c index 84ad63904..b49a2113b 100644 --- a/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c @@ -1828,7 +1828,8 @@ int lv_rename(struct cmd_context *cmd, struct logical_volume *lv, * (resume of snapshot resumes origin too) */ dm_list_iterate_back_items(lvlp, &lvs_changed) - resume_lv(cmd, lvlp->lv); + if (!resume_lv(cmd, lvlp->lv)) + stack; out: backup(vg); return r; diff --git a/lib/metadata/mirror.c b/lib/metadata/mirror.c index e963d2dd2..b5578f1a9 100644 --- a/lib/metadata/mirror.c +++ b/lib/metadata/mirror.c @@ -615,8 +615,9 @@ static int _remove_mirror_images(struct logical_volume *lv, log_error("Problem suspending temporary LV %s", temp_layer_lv->name); if (!vg_commit(mirrored_seg->lv->vg)) { - resume_lv(mirrored_seg->lv->vg->cmd, mirrored_seg->lv); - return 0; + if (!resume_lv(mirrored_seg->lv->vg->cmd, mirrored_seg->lv)) + stack; + return_0; } log_very_verbose("Updating \"%s\" in kernel", mirrored_seg->lv->name); diff --git a/tools/lvchange.c b/tools/lvchange.c index f01d560a7..11e128a56 100644 --- a/tools/lvchange.c +++ b/tools/lvchange.c @@ -64,7 +64,8 @@ static int lvchange_permission(struct cmd_context *cmd, } if (!vg_commit(lv->vg)) { - resume_lv(cmd, lv); + if (!resume_lv(cmd, lv)) + stack; goto_out; } @@ -402,7 +403,8 @@ static int lvchange_readahead(struct cmd_context *cmd, } if (!vg_commit(lv->vg)) { - resume_lv(cmd, lv); + if (!resume_lv(cmd, lv)) + stack; goto_out; } diff --git a/tools/lvconvert.c b/tools/lvconvert.c index b179f601a..f1a430da0 100644 --- a/tools/lvconvert.c +++ b/tools/lvconvert.c @@ -796,7 +796,8 @@ static int _lvconvert_mirrors(struct cmd_context *cmd, struct logical_volume *lv } if (!vg_commit(lv->vg)) { - resume_lv(cmd, lv); + if (!resume_lv(cmd, lv)) + stack; goto_out; } diff --git a/tools/lvresize.c b/tools/lvresize.c index 5adaf3ceb..395d105a0 100644 --- a/tools/lvresize.c +++ b/tools/lvresize.c @@ -638,7 +638,8 @@ static int _lvresize(struct cmd_context *cmd, struct volume_group *vg, if (!vg_commit(vg)) { stack; - resume_lv(cmd, lock_lv); + if (!resume_lv(cmd, lock_lv)) + stack; backup(vg); return ECMD_FAILED; } diff --git a/tools/pvmove.c b/tools/pvmove.c index 5b3a2dcd4..fff604350 100644 --- a/tools/pvmove.c +++ b/tools/pvmove.c @@ -302,7 +302,8 @@ static int _update_metadata(struct cmd_context *cmd, struct volume_group *vg, /* Suspend mirrors on subsequent calls */ if (!first_time) { if (!suspend_lv(cmd, lv_mirr)) { - resume_lvs(cmd, lvs_changed); + if (!resume_lvs(cmd, lvs_changed)) + stack; vg_revert(vg); goto_out; } @@ -312,8 +313,10 @@ static int _update_metadata(struct cmd_context *cmd, struct volume_group *vg, if (!vg_commit(vg)) { log_error("ABORTING: Volume group metadata update failed."); if (!first_time) - resume_lv(cmd, lv_mirr); - resume_lvs(cmd, lvs_changed); + if (!resume_lv(cmd, lv_mirr)) + stack; + if (!resume_lvs(cmd, lvs_changed)) + stack; goto out; } @@ -339,7 +342,8 @@ static int _update_metadata(struct cmd_context *cmd, struct volume_group *vg, } else if (!resume_lv(cmd, lv_mirr)) { log_error("Unable to reactivate logical volume \"%s\"", lv_mirr->name); - resume_lvs(cmd, lvs_changed); + if (!resume_lvs(cmd, lvs_changed)) + stack; goto out; } @@ -513,8 +517,10 @@ static int _finish_pvmove(struct cmd_context *cmd, struct volume_group *vg, log_error("ABORTING: Failed to write new data locations " "to disk."); vg_revert(vg); - resume_lv(cmd, lv_mirr); - resume_lvs(cmd, lvs_changed); + if (!resume_lv(cmd, lv_mirr)) + stack; + if (!resume_lvs(cmd, lvs_changed)) + stack; return 0; } @@ -526,7 +532,8 @@ static int _finish_pvmove(struct cmd_context *cmd, struct volume_group *vg, } /* Unsuspend LVs */ - resume_lvs(cmd, lvs_changed); + if (!resume_lvs(cmd, lvs_changed)) + stack; /* Deactivate mirror LV */ if (!deactivate_lv(cmd, lv_mirr)) { diff --git a/tools/toollib.c b/tools/toollib.c index fce399b5d..841acfee2 100644 --- a/tools/toollib.c +++ b/tools/toollib.c @@ -1251,7 +1251,18 @@ int vgcreate_params_set_from_args(struct cmd_context *cmd, int lv_refresh(struct cmd_context *cmd, struct logical_volume *lv) { - return suspend_lv(cmd, lv) && resume_lv(cmd, lv); + int r = 0; + + r = suspend_lv(cmd, lv); + if (!r) + goto_out; + + r = resume_lv(cmd, lv); + if (!r) + goto_out; + +out: + return r; } int vg_refresh_visible(struct cmd_context *cmd, struct volume_group *vg)