diff options
author | Heinz Mauelshagen <heinzm@redhat.com> | 2020-07-09 14:09:46 +0200 |
---|---|---|
committer | Heinz Mauelshagen <heinzm@redhat.com> | 2020-07-09 14:39:50 +0200 |
commit | 286a793c12aac1fde17cb9768bacad660e1dfeb3 (patch) | |
tree | 9a1c60a8055e064b61e7544b6249b4ff603af32b | |
parent | d0faad0db38fe733cae42d7df136d7ed4f7bcba6 (diff) | |
download | lvm2-286a793c12aac1fde17cb9768bacad660e1dfeb3.tar.gz |
lvconvert: fix conversion to 'mirrored' mirror log with larger regionsize
merge.c:_check_lv_segment() was checking regionsize vs. mirrored LV size on
any 'mirror/raid1/raid10' segment type including type 'mirrored' mirror logs.
Avoid the check only for 'mirrored' mirror logs to allow conversion from log
type 'disk' with regionsize > mirror log SubLV size.
As we disabled support for 'mirrored' mirror logs with
commit e82303fd6abc3ae43168f8032806c7c17d181a3e which still conditionally
allows to enable it via global/support_mirrored_mirror_logs=1,
patch is mandatory for all distributions.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1712983
-rw-r--r-- | WHATS_NEW | 1 | ||||
-rw-r--r-- | lib/metadata/merge.c | 3 |
2 files changed, 3 insertions, 1 deletions
@@ -1,5 +1,6 @@ Version 2.03.10 - ================================= + Fix conversion to 'mirrored' mirror log with larger regionsize. Zero pool metadata on allocation (disable with allocation/zero_metadata=0). Failure in zeroing or wiping will fail command (bypass with -Zn, -Wn). Fix running out of free buffers for async writing for larger writes. diff --git a/lib/metadata/merge.c b/lib/metadata/merge.c index ecd55efdd..1d47449db 100644 --- a/lib/metadata/merge.c +++ b/lib/metadata/merge.c @@ -441,7 +441,8 @@ static void _check_lv_segment(struct logical_volume *lv, struct lv_segment *seg, if (seg_is_mirror(seg)) { if (!seg->region_size) seg_error("region size is zero"); - else if (seg->region_size > seg->lv->size) + /* Avoid regionsize check in case of 'mirrored' mirror log or larger than mlog regionsize will fail */ + else if (!strstr(seg->lv->name, "_mlog") && (seg->region_size > seg->lv->size)) seg_error("region size is bigger then LV itself"); else if (!is_power_of_2(seg->region_size)) seg_error("region size is non power of 2"); |