From 771e191e99ae3b05526a45c49c3dc3402f9aa40d Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Mon, 1 Jun 2009 15:55:06 +0000 Subject: [PATCH] Fix rename of active snapshot with virtual origin. Code must suspend/resume virtual origin too when renaming snaphsot otherwise in kernel old name remains. --- WHATS_NEW | 1 + lib/metadata/lv_manip.c | 21 ++++++++++++++------- test/t-lvcreate-usage.sh | 7 +++++++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index 07c3e3843..43b14f6ac 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.48 - =============================== + Fix rename of active snapshot with virtual origin. Fix convert polling to ignore LV with different UUID. Cache underlying device readahead only before activation calls. Fix segfault when calculating readahead on missing device in vgreduce. diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c index fcfd30d15..e4f1ad1bb 100644 --- a/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c @@ -1765,6 +1765,8 @@ int lv_rename(struct cmd_context *cmd, struct logical_volume *lv, { struct volume_group *vg = lv->vg; struct lv_names lv_names; + DM_LIST_INIT(lvs_changed); + struct lv_list lvl, lvl2; int r = 0; /* rename is not allowed on sub LVs */ @@ -1799,22 +1801,27 @@ int lv_rename(struct cmd_context *cmd, struct logical_volume *lv, return 0; } + lvl.lv = lv; + dm_list_add(&lvs_changed, &lvl.list); + + /* rename active virtual origin too */ + if (lv_is_cow(lv) && lv_is_virtual_origin(lvl2.lv = origin_from_cow(lv))) + dm_list_add(&lvs_changed, &lvl2.list); + log_verbose("Writing out updated volume group"); if (!vg_write(vg)) return 0; - if (!suspend_lv(cmd, lv)) { + + if (!suspend_lvs(cmd, &lvs_changed)) { vg_revert(vg); goto_out; } - if (!vg_commit(vg)) { - resume_lv(cmd, lv); - goto_out; - } + if (!(r = vg_commit(vg))) + stack; - resume_lv(cmd, lv); - r = 1; + resume_lvs(cmd, &lvs_changed); out: backup(vg); return r; diff --git a/test/t-lvcreate-usage.sh b/test/t-lvcreate-usage.sh index 43cf71672..d947023ce 100755 --- a/test/t-lvcreate-usage.sh +++ b/test/t-lvcreate-usage.sh @@ -116,3 +116,10 @@ lvcreate -L 32M -n $lv --regionsize 4M -m 1 $vg check_lv_field_ $vg/$lv regionsize "4.00M" lvremove -ff $vg +# snapshot with virtual origin works +lvcreate -s --virtualoriginsize 64M -L 32M -n $lv1 $vg +lvrename $vg/$lv1 $vg/$lv2 +lvcreate -s --virtualoriginsize 64M -L 32M -n $lv1 $vg +lvchange -a n $vg/$lv1 +lvremove $vg/$lv1 +lvremove -ff $vg