[lvm-devel] master - lvconvert: Forward --splitmirror to a cache origin when applicable.

Petr Rockai mornfall at fedoraproject.org
Mon Oct 6 06:14:18 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=d2f901f04f76cca110475395272e70c83bea816d
Commit:        d2f901f04f76cca110475395272e70c83bea816d
Parent:        91615603cdc7974047103c4c6f6af7e56f97437b
Author:        Petr Rockai <prockai at redhat.com>
AuthorDate:    Mon Oct 6 08:11:06 2014 +0200
Committer:     Petr Rockai <prockai at redhat.com>
CommitterDate: Mon Oct 6 08:11:06 2014 +0200

lvconvert: Forward --splitmirror to a cache origin when applicable.

---
 test/shell/lvconvert-cache.sh |   14 ++++++++++++++
 tools/lvconvert.c             |   10 ++++++++++
 2 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/test/shell/lvconvert-cache.sh b/test/shell/lvconvert-cache.sh
index 6c2acd9..5979912 100644
--- a/test/shell/lvconvert-cache.sh
+++ b/test/shell/lvconvert-cache.sh
@@ -81,4 +81,18 @@ lvs -a $vg/${lv1}_corig_rimage_0        # ensure images are properly renamed
 dmsetup table ${vg}-$lv1 | grep cache   # ensure it is loaded in kernel
 lvremove -ff $vg
 
+lvcreate -n corigin -l 10 $vg
+lvcreate -n pool -l 10 $vg
+lvs -a -o +devices
+echo n | not lvconvert --type cache --cachepool $vg/pool $vg/corigin
+lvconvert -y --type cache --cachepool $vg/pool $vg/corigin
+
+lvremove -ff $vg
+
+# TODO: creating a cache on top of active RAID appears to be broken
+lvcreate -n corigin -m 1 --type raid1 -l 10 $vg
+lvcreate -n cpool --type cache $vg/corigin -l 10
+lvchange --refresh $vg # fix up DM tables
+lvconvert --splitmirrors 1 --name split $vg/corigin $dev1
+
 vgremove -f $vg
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 09257e3..0d800ec 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -3064,6 +3064,7 @@ static int _lvconvert_cache(struct cmd_context *cmd,
 static int _lvconvert_single(struct cmd_context *cmd, struct logical_volume *lv,
 			     void *handle)
 {
+	struct logical_volume *origin = NULL;
 	struct lvconvert_params *lp = handle;
 	struct dm_list *failed_pvs;
 
@@ -3102,6 +3103,15 @@ static int _lvconvert_single(struct cmd_context *cmd, struct logical_volume *lv,
 		}
 	}
 
+	/* forward splitmirror operations to the cache origin, which may be raid
+	 * or old-style mirror */
+	if (arg_count(cmd, splitmirrors_ARG) && lv_is_cache_type(lv)
+	    && (origin = seg_lv(first_seg(lv), 0)) && lv_is_cache_origin(origin)) {
+		log_warn("WARNING: Selected operation does not work with cache-type LVs.");
+		log_warn("Proceeding using the cache origin LV %s instead", origin->name);
+		lv = origin;
+	}
+
 	if (!lp->segtype) {
 		/* segtype not explicitly set in _read_params */
 		lp->segtype = first_seg(lv)->segtype;




More information about the lvm-devel mailing list