mrc0mmand / rpms / lvm2

Forked from rpms/lvm2 2 years ago
Clone

Blame SOURCES/lvm2-2_02_178-pvmove-fix-_remove_sibling_pvs_from_trim_list.patch

f0aa83
From 9c3e21e2483fa1818ff4ff4792aaec1d4ea437f8 Mon Sep 17 00:00:00 2001
f0aa83
From: Zdenek Kabelac <zkabelac@redhat.com>
f0aa83
Date: Thu, 11 Jan 2018 13:21:08 +0100
f0aa83
Subject: [PATCH 14/25] pvmove: fix _remove_sibling_pvs_from_trim_list
f0aa83
f0aa83
Fix the function to really check it sibling raid image LV.
f0aa83
For LV_rmeta_0  check for   LV_rimage_0   instead of
f0aa83
LV_rmeta_0rimage_0.
f0aa83
f0aa83
(cherry picked from commit 7c6fb63041cd5c1fb899cc468d0a5cf23a01abbe)
f0aa83
---
f0aa83
 WHATS_NEW      |  1 +
f0aa83
 tools/pvmove.c | 16 +++++++++++++---
f0aa83
 2 files changed, 14 insertions(+), 3 deletions(-)
f0aa83
f0aa83
diff --git a/WHATS_NEW b/WHATS_NEW
f0aa83
index c997206..4368543 100644
f0aa83
--- a/WHATS_NEW
f0aa83
+++ b/WHATS_NEW
f0aa83
@@ -1,5 +1,6 @@
f0aa83
 Version 2.02.178 - 
f0aa83
 =====================================
f0aa83
+  Fix trimming sibling PVs when doing a pvmove of raid subLVs.
f0aa83
   Preserve exclusive activation during thin snaphost merge.
f0aa83
   Avoid exceeding array bounds in allocation tag processing.
f0aa83
 
f0aa83
diff --git a/tools/pvmove.c b/tools/pvmove.c
f0aa83
index 7bf1713..39cf25f 100644
f0aa83
--- a/tools/pvmove.c
f0aa83
+++ b/tools/pvmove.c
f0aa83
@@ -145,6 +145,7 @@ static int _remove_sibling_pvs_from_trim_list(struct logical_volume *lv,
f0aa83
 					      struct dm_list *trim_list)
f0aa83
 {
f0aa83
 	char *idx, *suffix;
f0aa83
+	const char *sibling;
f0aa83
 	char sublv_name[NAME_LEN];
f0aa83
 	struct logical_volume *sublv;
f0aa83
 	struct dm_list untrim_list, *pvh1, *pvh2;
f0aa83
@@ -159,7 +160,16 @@ static int _remove_sibling_pvs_from_trim_list(struct logical_volume *lv,
f0aa83
 
f0aa83
 	dm_list_init(&untrim_list);
f0aa83
 
f0aa83
-	if (!(suffix = first_substring(lv_name, "_rimage_", "_rmeta_", NULL))) {
f0aa83
+	if (!dm_strncpy(sublv_name, lv_name, sizeof(sublv_name))) {
f0aa83
+		log_error(INTERNAL_ERROR "LV name %s is too long.", lv_name);
f0aa83
+		return 0;
f0aa83
+	}
f0aa83
+
f0aa83
+	if ((suffix = strstr(sublv_name, "_rimage_")))
f0aa83
+		sibling = "meta";
f0aa83
+	else if ((suffix = strstr(sublv_name, "_rmeta_")))
f0aa83
+		sibling = "image";
f0aa83
+	else {
f0aa83
 		log_error("Can't find rimage or rmeta suffix.");
f0aa83
 		return 0;
f0aa83
 	}
f0aa83
@@ -171,8 +181,8 @@ static int _remove_sibling_pvs_from_trim_list(struct logical_volume *lv,
f0aa83
 	idx++;
f0aa83
 
f0aa83
 	/* Create the siblings name (e.g. "raidlv_rmeta_N" -> "raidlv_rimage_N" */
f0aa83
-	if (dm_snprintf(sublv_name, sizeof(sublv_name), "%s_r%s_%s", lv_name,
f0aa83
-			strstr(suffix, "_rimage_") ? "meta" : "image", idx) < 0) {
f0aa83
+	if (dm_snprintf(suffix + 2, sizeof(sublv_name) - 2 - (suffix - sublv_name),
f0aa83
+			"%s_%s", sibling, idx) < 0) {
f0aa83
 		log_error("Raid sublv for name %s too long.", lv_name);
f0aa83
 		return 0;
f0aa83
 	}
f0aa83
-- 
f0aa83
1.8.3.1
f0aa83