[lvm-devel] master - lvconvert: allow regionsize on upconvert from linear

Heinz Mauelshagen mauelsha at fedoraproject.org
Fri Feb 24 06:32:32 UTC 2017


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=2574d3257ad41cad8dcbad3332774172e86f05da
Commit:        2574d3257ad41cad8dcbad3332774172e86f05da
Parent:        64a2fad5d6c65e81269251408dff10854f0ace7e
Author:        Heinz Mauelshagen <heinzm at redhat.com>
AuthorDate:    Fri Feb 24 05:00:55 2017 +0100
Committer:     Heinz Mauelshagen <heinzm at redhat.com>
CommitterDate: Fri Feb 24 05:20:58 2017 +0100

lvconvert: allow regionsize on upconvert from linear

Allow to provide regionsize with "lvconvert -m1 -R N " on
upconverts from linear and on N -> M raid1 leg conversions.

Resolves: rhbz1394427
---
 lib/metadata/metadata-exported.h |    1 +
 lib/metadata/raid_manip.c        |   13 ++++++++++---
 tools/lvconvert.c                |    2 +-
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index 11fb247..376fee9 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -1213,6 +1213,7 @@ int lv_is_raid_with_tracking(const struct logical_volume *lv);
 uint32_t lv_raid_image_count(const struct logical_volume *lv);
 int lv_raid_change_image_count(struct logical_volume *lv,
 			       uint32_t new_count,
+			       uint32_t new_region_size,
 			       struct dm_list *allocate_pvs);
 int lv_raid_split(struct logical_volume *lv, const char *split_name,
 		  uint32_t new_count, struct dm_list *splittable_pvs);
diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c
index e21e6cc..ab0bfab 100644
--- a/lib/metadata/raid_manip.c
+++ b/lib/metadata/raid_manip.c
@@ -2866,11 +2866,11 @@ static int _raid_extract_images(struct logical_volume *lv,
 					  display_lvname(lv),
 					  display_lvname(seg_lv(seg, s)));
 
-				log_error("Try removing the PV list and rerun"
+				log_error("Try removing the PV list and rerun."
 					  " the command.");
 				return 0;
 			}
-			log_debug("LVs with error segments to be removed: %s %s.",
+			log_debug("LVs with error segments to be removed: %s %s",
 				  display_lvname(seg_metalv(seg, s)),
 				  display_lvname(seg_lv(seg, s)));
 		} else {
@@ -3013,8 +3013,15 @@ static int _lv_raid_change_image_count(struct logical_volume *lv, uint32_t new_c
 }
 
 int lv_raid_change_image_count(struct logical_volume *lv, uint32_t new_count,
-			       struct dm_list *allocate_pvs)
+			       const uint32_t new_region_size, struct dm_list *allocate_pvs)
 {
+	struct lv_segment *seg = first_seg(lv);
+
+	if (new_region_size) {
+		seg->region_size = new_region_size;
+		_check_and_adjust_region_size(lv);
+	}
+
 	return _lv_raid_change_image_count(lv, new_count, allocate_pvs, NULL, 1, 0);
 }
 
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index abec04a..0db10cb 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -1359,7 +1359,7 @@ static int _lvconvert_raid(struct logical_volume *lv, struct lvconvert_params *l
 					  DEFAULT_RAID1_MAX_IMAGES, lp->segtype->name, display_lvname(lv));
 				return 0;
 			}
-			if (!lv_raid_change_image_count(lv, image_count, /* lp->region_size, */ lp->pvh))
+			if (!lv_raid_change_image_count(lv, image_count, lp->region_size, lp->pvh))
 				return_0;
 
 			log_print_unless_silent("Logical volume %s successfully converted.",




More information about the lvm-devel mailing list