diff --git a/WHATS_NEW b/WHATS_NEW index 95f79f4cb..15d239f5a 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.89 - ================================== + Fix lv_mirror_count to handle mirrored stripes properly. Fix failure to down-convert a mirror to linear due to udev "dev open" conflict Fix mirrored log creation when PE size is small - force log_size >= region_size Fix improper RAID 64-bit status flag reset when and'ing against 32-bit flag. diff --git a/lib/metadata/mirror.c b/lib/metadata/mirror.c index e07597f9d..a4f906b77 100644 --- a/lib/metadata/mirror.c +++ b/lib/metadata/mirror.c @@ -114,16 +114,18 @@ uint32_t lv_mirror_count(const struct logical_volume *lv) return 1; seg = first_seg(lv); - mirrors = seg->area_count; + mirrors = 0; for (s = 0; s < seg->area_count; s++) { if (seg_type(seg, s) != AREA_LV) continue; if (is_temporary_mirror_layer(seg_lv(seg, s))) mirrors += lv_mirror_count(seg_lv(seg, s)) - 1; + else + mirrors++; } - return mirrors; + return mirrors ? mirrors : 1; } struct lv_segment *find_mirror_seg(struct lv_segment *seg)