diff options
author | Heinz Mauelshagen <heinzm@redhat.com> | 2016-12-12 22:06:17 +0100 |
---|---|---|
committer | Heinz Mauelshagen <heinzm@redhat.com> | 2016-12-12 22:08:47 +0100 |
commit | 87117c2b2546231c789f92c75590f053a8fb987c (patch) | |
tree | 1cc66116b58aaeb5e2c0a6950877ac18abcb6c8c | |
parent | 75ec7c8deeed95f005d78b4b962f70f783f7f0a0 (diff) | |
download | lvm2-87117c2b2546231c789f92c75590f053a8fb987c.tar.gz |
lvchange: allow a transiently failed RaidLV to be refreshed
Enhance commit 0b8bf73a63d8 to refresh the top-level LV correctly
in case of a clustered, remotely activated RaidLV.
Related: rhbz1399844
-rw-r--r-- | lib/metadata/lv_manip.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c index 120217fac..fdfee366f 100644 --- a/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c @@ -1417,17 +1417,23 @@ int lv_refresh_suspend_resume(const struct logical_volume *lv) * with transient failures of SubLVs. */ if (lv_is_raid(lv)) { - uint32_t s; - struct lv_segment *seg = first_seg(lv); - - for (s = 0; s < seg->area_count; s++) { - if (seg_type(seg, s) == AREA_LV && - !_lv_refresh_suspend_resume(seg_lv(seg, s))) - return 0; - if (seg->meta_areas && - seg_metatype(seg, s) == AREA_LV && - !_lv_refresh_suspend_resume(seg_metalv(seg, s))) + if (vg_is_clustered(lv->vg) && + lv_is_active_remotely(lv)) { + if (!_lv_refresh_suspend_resume(lv)) return 0; + } else { + uint32_t s; + struct lv_segment *seg = first_seg(lv); + + for (s = 0; s < seg->area_count; s++) { + if (seg_type(seg, s) == AREA_LV && + !_lv_refresh_suspend_resume(seg_lv(seg, s))) + return 0; + if (seg->meta_areas && + seg_metatype(seg, s) == AREA_LV && + !_lv_refresh_suspend_resume(seg_metalv(seg, s))) + return 0; + } } } |