[lvm-devel] master - raid: Avoid double suffix on rmeta LV name paired with rimage LV.

Alasdair Kergon agk at fedoraproject.org
Thu Aug 11 22:33:40 UTC 2016


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=93b61c07eb14f6185c708bd74f7e471b50cf251b
Commit:        93b61c07eb14f6185c708bd74f7e471b50cf251b
Parent:        e30fb19030823cd8bb181e2b494488c18c187850
Author:        Alasdair G Kergon <agk at redhat.com>
AuthorDate:    Thu Aug 11 23:31:49 2016 +0100
Committer:     Alasdair G Kergon <agk at redhat.com>
CommitterDate: Thu Aug 11 23:31:49 2016 +0100

raid: Avoid double suffix on rmeta LV name paired with rimage LV.

---
 WHATS_NEW                 |    1 +
 lib/metadata/raid_manip.c |   23 +++++++++++++++++++----
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index 8f4fe9c..425729a 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.164 -
 ===================================
+  Avoid double suffix when naming _rmeta LV paired with _rimage LV.
 
 Version 2.02.163 - 10th August 2016
 ===================================
diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c
index c1cff33..ce560fe 100644
--- a/lib/metadata/raid_manip.c
+++ b/lib/metadata/raid_manip.c
@@ -108,6 +108,22 @@ static void _check_and_adjust_region_size(const struct logical_volume *lv)
 	return _ensure_min_region_size(lv);
 }
 
+/* Strip any raid suffix off LV name */
+static char *_top_level_raid_lv_name(struct logical_volume *lv)
+{
+	char *new_lv_name, *suffix;
+
+	if (!(new_lv_name = dm_pool_strdup(lv->vg->vgmem, lv->name))) {
+		log_error("Failed to allocate string for new LV name.");
+		return NULL;
+	}
+        
+	if ((suffix = first_substring(new_lv_name, "_rimage_", "_mimage_", NULL)))
+		*suffix = '\0';
+
+	return new_lv_name;
+}
+
 static int _lv_is_raid_with_tracking(const struct logical_volume *lv,
 				     struct logical_volume **tracking)
 {
@@ -679,7 +695,7 @@ static int _alloc_rmeta_for_lv(struct logical_volume *data_lv,
 	struct dm_list allocatable_pvs;
 	struct alloc_handle *ah;
 	struct lv_segment *seg = first_seg(data_lv);
-	char *p, base_name[NAME_LEN];
+	char *base_name;
 
 	dm_list_init(&allocatable_pvs);
 
@@ -699,9 +715,8 @@ static int _alloc_rmeta_for_lv(struct logical_volume *data_lv,
 		return 0;
 	}
 
-	(void) dm_strncpy(base_name, data_lv->name, sizeof(base_name));
-	if ((p = strstr(base_name, "_mimage_")))
-		*p = '\0';
+	if (!(base_name = _top_level_raid_lv_name(data_lv)))
+		return_0;
 
 	if (!(ah = allocate_extents(data_lv->vg, NULL, seg->segtype, 0, 1, 0,
 				    seg->region_size,




More information about the lvm-devel mailing list