mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-04 09:18:36 +03:00
deactivate_lvs: deactivate any missing RaidLV legs
In case of failed legs, raid replaces those with e.g. "vg-lv_rimage_0-missing_0_0" mapped to an error target. Those errouneously remain on deactivation. Fix by removing them on deactivation/removal of the RaidLV.
This commit is contained in:
parent
7195df5aca
commit
94632eb155
@ -2506,6 +2506,16 @@ int lv_deactivate(struct cmd_context *cmd, const char *lvid_s, const struct logi
|
|||||||
|
|
||||||
critical_section_inc(cmd, "deactivating");
|
critical_section_inc(cmd, "deactivating");
|
||||||
r = _lv_deactivate(lv);
|
r = _lv_deactivate(lv);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remove any transiently activated error
|
||||||
|
* devices which arean't used any more.
|
||||||
|
*/
|
||||||
|
if (r && lv_is_raid(lv) && !lv_deactivate_any_missing_subdevs(lv)) {
|
||||||
|
log_error("Failed to remove temporary SubLVs from %s",
|
||||||
|
display_lvname(lv));
|
||||||
|
r = 0;
|
||||||
|
}
|
||||||
critical_section_dec(cmd, "deactivated");
|
critical_section_dec(cmd, "deactivated");
|
||||||
|
|
||||||
if (!lv_info(cmd, lv, 0, &info, 0, 0) || info.exists) {
|
if (!lv_info(cmd, lv, 0, &info, 0, 0) || info.exists) {
|
||||||
@ -2735,10 +2745,8 @@ static int _lv_remove_any_missing_subdevs(struct logical_volume *lv)
|
|||||||
struct lv_segment *seg;
|
struct lv_segment *seg;
|
||||||
|
|
||||||
dm_list_iterate_items(seg, &lv->segments) {
|
dm_list_iterate_items(seg, &lv->segments) {
|
||||||
if (seg->area_count != 1)
|
|
||||||
return_0;
|
|
||||||
if (dm_snprintf(name, sizeof(name), "%s-%s-missing_%u_0", seg->lv->vg->name, seg->lv->name, seg_no) < 0)
|
if (dm_snprintf(name, sizeof(name), "%s-%s-missing_%u_0", seg->lv->vg->name, seg->lv->name, seg_no) < 0)
|
||||||
return 0;
|
return_0;
|
||||||
if (!_remove_dm_dev_by_name(name))
|
if (!_remove_dm_dev_by_name(name))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user