Blame SOURCES/lvm2-2_03_13-vgsplit-add-support-for-option-poolmetadataspare.patch

d16add
 WHATS_NEW                 |  1 +
d16add
 lib/metadata/pool_manip.c | 11 +++++++++++
d16add
 man/vgsplit.8_pregen      |  9 +++++++++
d16add
 tools/command-lines.in    |  2 +-
d16add
 tools/vgsplit.c           |  8 ++++++++
d16add
 5 files changed, 30 insertions(+), 1 deletion(-)
d16add
d16add
diff --git a/WHATS_NEW b/WHATS_NEW
d16add
index 097160e..0b8e3f2 100644
d16add
--- a/WHATS_NEW
d16add
+++ b/WHATS_NEW
d16add
@@ -1,5 +1,6 @@
d16add
 Version 2.03.13 - 
d16add
 ===============================
d16add
+  Support --poolmetadataspare with vgsplit.
d16add
   Fix detection of active components of external origin volume.
d16add
   Add vdoimport tool to support conversion of VDO volumes.
d16add
   Support configurable allocation/vdo_pool_header_size.
d16add
diff --git a/lib/metadata/pool_manip.c b/lib/metadata/pool_manip.c
d16add
index 9ceec3a..e451e92 100644
d16add
--- a/lib/metadata/pool_manip.c
d16add
+++ b/lib/metadata/pool_manip.c
d16add
@@ -722,6 +722,17 @@ int handle_pool_metadata_spare(struct volume_group *vg, uint32_t extents,
d16add
 		return 1;
d16add
 	}
d16add
 
d16add
+	if (!extents) {
d16add
+		/* pmspare is not needed */
d16add
+		if (lv) {
d16add
+			log_debug_metadata("Dropping unused pool metadata spare LV %s.",
d16add
+					   display_lvname(lv));
d16add
+			if (!lv_remove_single(vg->cmd, lv, DONT_PROMPT, 0))
d16add
+				return_0;
d16add
+		}
d16add
+		return 1;
d16add
+	}
d16add
+
d16add
 	if (extents > MAX_SIZE)
d16add
 		extents = MAX_SIZE;
d16add
 
d16add
diff --git a/man/vgsplit.8_pregen b/man/vgsplit.8_pregen
d16add
index 331c6e4..8a0ae59 100644
d16add
--- a/man/vgsplit.8_pregen
d16add
+++ b/man/vgsplit.8_pregen
d16add
@@ -70,6 +70,8 @@ Common options for command:
d16add
 .hy
d16add
 ]
d16add
 .br
d16add
+[    \fB--poolmetadataspare\fP \fBy\fP|\fBn\fP ]
d16add
+.br
d16add
 [    \fB--\fP[\fBvg\fP]\fBmetadatacopies\fP \fBall\fP|\fBunmanaged\fP|\fINumber\fP ]
d16add
 .ad b
d16add
 .RE
d16add
@@ -235,6 +237,13 @@ Move only PVs used by the named LV.
d16add
 Disable locking.
d16add
 .
d16add
 .HP
d16add
+\fB--poolmetadataspare\fP \fBy\fP|\fBn\fP
d16add
+.br
d16add
+Enable or disable the automatic creation and management of a
d16add
+spare pool metadata LV in the VG. A spare metadata LV is reserved
d16add
+space that can be used when repairing a pool.
d16add
+.
d16add
+.HP
d16add
 \fB--profile\fP \fIString\fP
d16add
 .br
d16add
 An alias for --commandprofile or --metadataprofile, depending
d16add
diff --git a/tools/command-lines.in b/tools/command-lines.in
d16add
index 8607305..a4785b3 100644
d16add
--- a/tools/command-lines.in
d16add
+++ b/tools/command-lines.in
d16add
@@ -1912,7 +1912,7 @@ ID: vgscan_general
d16add
 
d16add
 ---
d16add
 
d16add
-OO_VGSPLIT: --autobackup Bool
d16add
+OO_VGSPLIT: --autobackup Bool, --poolmetadataspare Bool
d16add
 
d16add
 # used only when the destination VG is new
d16add
 OO_VGSPLIT_NEW: --alloc Alloc,
d16add
diff --git a/tools/vgsplit.c b/tools/vgsplit.c
d16add
index 296248e..a085ac2 100644
d16add
--- a/tools/vgsplit.c
d16add
+++ b/tools/vgsplit.c
d16add
@@ -525,6 +525,7 @@ int vgsplit(struct cmd_context *cmd, int argc, char **argv)
d16add
 	int existing_vg = 0;
d16add
 	int r = ECMD_FAILED;
d16add
 	const char *lv_name;
d16add
+	int poolmetadataspare = arg_int_value(cmd, poolmetadataspare_ARG, DEFAULT_POOL_METADATA_SPARE);
d16add
 
d16add
 	if ((arg_is_set(cmd, name_ARG) + argc) < 3) {
d16add
 		log_error("Existing VG, new VG and either physical volumes "
d16add
@@ -699,6 +700,13 @@ int vgsplit(struct cmd_context *cmd, int argc, char **argv)
d16add
 	 */
d16add
 	vg_to->status |= EXPORTED_VG;
d16add
 
d16add
+
d16add
+	if (!handle_pool_metadata_spare(vg_to, 0, &vg_to->pvs, poolmetadataspare))
d16add
+		goto_bad;
d16add
+
d16add
+	if (!handle_pool_metadata_spare(vg_from, 0, &vg_from->pvs, poolmetadataspare))
d16add
+		goto_bad;
d16add
+
d16add
 	if (!archive(vg_to))
d16add
 		goto_bad;
d16add