[lvm-devel] master - lvconvert: allow --type with --regionsize

Heinz Mauelshagen heinzm at sourceware.org
Wed Apr 5 22:03:36 UTC 2017


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=1ef1bdab27b2e2d3fb2491b42e3f7afa3b93140e
Commit:        1ef1bdab27b2e2d3fb2491b42e3f7afa3b93140e
Parent:        7ccb4825c7c5f40e93afea065100105f3d5f3551
Author:        Heinz Mauelshagen <heinzm at redhat.com>
AuthorDate:    Thu Apr 6 00:01:29 2017 +0200
Committer:     Heinz Mauelshagen <heinzm at redhat.com>
CommitterDate: Thu Apr 6 00:03:16 2017 +0200

lvconvert: allow --type with --regionsize

Allow the combination of both arguments keeping
the raid level but changing the regionssize
(e.g. "lvconvert --type raid1 --regionsize 1M RaidLV"
 on an existing raid1 LV).

Resolves: rhbz1438396
---
 lib/metadata/raid_manip.c |   26 ++++++++++++++++++++++++--
 1 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c
index 63a2a6c..c7d1d76 100644
--- a/lib/metadata/raid_manip.c
+++ b/lib/metadata/raid_manip.c
@@ -5355,7 +5355,7 @@ static int _takeover_from_raid1_to_raid0_meta(TAKEOVER_FN_ARGS)
 
 static int _takeover_from_raid1_to_raid1(TAKEOVER_FN_ARGS)
 {
-	return _takeover_unsupported_yet(lv, new_stripes, new_segtype);
+	return _takeover_unsupported(lv, new_segtype, 0, 0, 0, 0, new_stripes, 0, 0, NULL);
 }
 
 static int _takeover_from_raid1_to_raid10(TAKEOVER_FN_ARGS)
@@ -5975,7 +5975,29 @@ int lv_raid_convert(struct logical_volume *lv,
 	/* Exit without doing activation checks if the combination isn't possible */
 	if (_takeover_not_possible(takeover_fn))
 		return takeover_fn(lv, new_segtype, yes, force, new_image_count, 0, new_stripes, stripe_size,
-				   region_size, allocate_pvs);
+			   region_size, allocate_pvs);
+
+	/*
+	 * User requested "--type raid*" without neither
+	 * requesting a reshape nor a takeover.
+	 *
+	 * I.e. the raid level is the same but no layout,
+	 * stripesize or number of stripes change is required.
+	 *
+	 * Check if a regionsize change is required.
+	 */
+	if (seg->segtype == new_segtype && new_region_size) {
+		if (seg->region_size != new_region_size) {
+			log_verbose("Converting %s LV %s to regionsize %s.",
+				    lvseg_name(first_seg(lv)), display_lvname(lv),
+				    display_size(lv->vg->cmd, new_region_size));
+			return _region_size_change_requested(lv, yes, new_region_size);
+		} else {
+			log_error("Can't convert %s LV %s without a region size change.",
+				  lvseg_name(seg), display_lvname(lv));
+			return 0;
+		}
+	}
 
 	log_verbose("Converting %s from %s to %s.",
 		    display_lvname(lv), lvseg_name(first_seg(lv)),




More information about the lvm-devel mailing list