[lvm-devel] master - mirror: validate region_size for mirrors

Zdenek Kabelac zkabelac at sourceware.org
Fri Apr 20 11:02:05 UTC 2018


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=79d214032b21074709cd24669f53b5e24c5c377d
Commit:        79d214032b21074709cd24669f53b5e24c5c377d
Parent:        1693fef529e7e1536d91956cfc4256c98cae58ab
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Thu Apr 19 17:38:04 2018 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Fri Apr 20 12:16:13 2018 +0200

mirror: validate region_size for mirrors

Check for region size properties of mirror segments.
---
 WHATS_NEW            |    1 +
 lib/metadata/merge.c |    8 ++++++++
 2 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index 434f4a0..2d085a1 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.178 - 
 =====================================
+  Extend validation of region_size for mirror segment.
   Reload whole device stack when reinitilizing mirror log.
   Mirrors without monitoring are WARNING and not blocking on error.
   Detect too big region_size with clustered mirrors.
diff --git a/lib/metadata/merge.c b/lib/metadata/merge.c
index f0da2fe..90b40e2 100644
--- a/lib/metadata/merge.c
+++ b/lib/metadata/merge.c
@@ -391,6 +391,14 @@ static void _check_lv_segment(struct logical_volume *lv, struct lv_segment *seg,
 			if (!(seg2 = first_seg(seg->log_lv)) || (find_mirror_seg(seg2) != seg))
 				seg_error("log LV does not point back to mirror segment");
 		}
+		if (seg_is_mirror(seg)) {
+			if (!seg->region_size)
+				seg_error("region size is zero");
+			else if (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");
+		}
 	} else { /* !mirrored */
 		if (seg->log_lv) {
 			if (lv_is_raid_image(lv))




More information about the lvm-devel mailing list