[lvm-devel] master - liblvm: insert layer with subvolume renames

Zdenek Kabelac zkabelac at fedoraproject.org
Wed Oct 3 13:14:53 UTC 2012


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=d442c3ef0cec424db797714704859fbc2154f000
Commit:        d442c3ef0cec424db797714704859fbc2154f000
Parent:        4648d33d0704de23876582f35786023ebc954fe9
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Thu Sep 6 15:21:18 2012 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Wed Oct 3 15:13:32 2012 +0200

liblvm: insert layer with subvolume renames

Rename also subvolumes if we are inserting _tdata layer.
(Currently it breaks mirrors if it would be generic, needs fixing).
---
 WHATS_NEW               |    1 +
 lib/metadata/lv_manip.c |   13 +++++++++++++
 2 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index 8050db8..dce8241 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.98 -
 =================================
+  Enhance insert_layer_for_lv() with recursive rename for _tdata LVs.
   Skip building dm tree for thin pool when called with origin_only flag.
   Add internal lv_rename_update() to rename LV without updating mda.
   Ensure descriptors 0,1,2 are always available.
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index eb5794c..4f86d14 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -3795,6 +3795,7 @@ struct logical_volume *insert_layer_for_lv(struct cmd_context *cmd,
 	struct logical_volume *layer_lv;
 	struct segment_type *segtype;
 	struct lv_segment *mapseg;
+	struct lv_names lv_names;
 	unsigned exclusive = 0;
 
 	/* create an empty layer LV */
@@ -3891,6 +3892,18 @@ struct logical_volume *insert_layer_for_lv(struct cmd_context *cmd,
 	lv_where->le_count = layer_lv->le_count;
 	lv_where->size = (uint64_t) lv_where->le_count * lv_where->vg->extent_size;
 
+	/*
+	 * recuresively rename sub LVs
+	 *   currently supported only for thin data layer
+	 *   FIXME: without strcmp it breaks mirrors....
+	 */
+	if (strcmp(layer_suffix, "_tdata") == 0) {
+		lv_names.old = lv_where->name;
+		lv_names.new = layer_lv->name;
+		if (!for_each_sub_lv(cmd, layer_lv, _rename_cb, (void *) &lv_names))
+			return 0;
+	}
+
 	return layer_lv;
 }
 




More information about the lvm-devel mailing list