summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlasdair G Kergon <agk@redhat.com>2016-07-05 23:08:14 +0100
committerAlasdair G Kergon <agk@redhat.com>2016-07-05 23:08:14 +0100
commitdfcdfa057bad1ea231f89b11ebcc761ffc49d922 (patch)
tree022c5c62ef00965007d62ed8c4115b0db38fcff1
parent4d4f48af9f18b9407c065cdc035cf8e397e08ac0 (diff)
downloadlvm2-dfcdfa057bad1ea231f89b11ebcc761ffc49d922.tar.gz
vgsplit: Don't skip moving internal snapshot LV.
Also place snapshot LV handling back at the end, after all possible origin and cow LVs got dealt with.
-rw-r--r--tools/vgsplit.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/tools/vgsplit.c b/tools/vgsplit.c
index afe87afba..221600e82 100644
--- a/tools/vgsplit.c
+++ b/tools/vgsplit.c
@@ -190,10 +190,6 @@ static int _move_snapshots(struct volume_group *vg_from,
if (!(lv->status & SNAPSHOT))
continue;
- /* Ignore, if no allocations on PVs of @vg_to */
- if (!lv_is_on_pvs(lv, &vg_to->pvs))
- continue;
-
dm_list_iterate_items(seg, &lv->segments) {
cow_from = _lv_is_in_vg(vg_from, seg->cow);
origin_from = _lv_is_in_vg(vg_from, seg->origin);
@@ -680,17 +676,18 @@ int vgsplit(struct cmd_context *cmd, int argc, char **argv)
if (!(_move_mirrors(vg_from, vg_to)))
goto_bad;
- /* Move required snapshots across */
- if (!(_move_snapshots(vg_from, vg_to)))
- goto_bad;
-
/* Move required pools across */
if (!(_move_thins(vg_from, vg_to)))
goto_bad;
+ /* Move required cache LVs across */
if (!(_move_cache(vg_from, vg_to)))
goto_bad;
+ /* Move required snapshots across */
+ if (!(_move_snapshots(vg_from, vg_to)))
+ goto_bad;
+
/* Split metadata areas and check if both vgs have at least one area */
if (!(vg_split_mdas(cmd, vg_from, vg_to)) && vg_from->pv_count) {
log_error("Cannot split: Nowhere to store metadata for new Volume Group");