1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Fix "lvremove -f vgname" when vgname contains snapshots.

Prior to this patch, "lvremove -f vgname" would fail if vgname contained
one or more snapshot LVs.  Now this passes, but has a side-effect.
If you issue "lvremove vgname" where vgname contains one or more snaps,
you will get an extra "y/n" prompt to remove the same snapshot.
Example:
$ lvs
  LV     VG     Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  lvsnap vgtest swi-a- 16.00M lvtest   0.05
  lvtest vgtest owi-a- 64.00M
$ lvremove vgtest
Do you really want to remove active logical volume "lvsnap"? [y/n]: n
  Logical volume "lvsnap" not removed
Do you really want to remove active logical volume "lvsnap"? [y/n]: n
  Logical volume "lvsnap" not removed
  Command failed with status code 5.

Fixing this will most likely require modification of the iterator
function, process_each_lvs_in_vg() to iterate over snaps in some
cases (e.g. lvs, vgdisplay -v) but not in others (lvremove).
This commit is contained in:
Dave Wysochanski 2008-11-17 18:20:13 +00:00
parent cee9a8d87e
commit da52655315
3 changed files with 3 additions and 1 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.43 - 10th November 2008
====================================
Cope with snapshot dependencies when removing a whole VG with lvremove.
Make man pages consistent with either-or options (use "|" everywhere).
Merge device-mapper into the lvm2 tree.
Correct prototype for --permission on lvchange and lvcreate man pages.

View File

@ -12,6 +12,7 @@ lvremove \- remove a logical volume
Confirmation will be requested before deactivating any active logical
volume prior to removal. Logical volumes cannot be deactivated
or removed while they are open (e.g. if they contain a mounted filesystem).
Removing an origin logical volume will also remove all dependent snapshots.
.sp
If the logical volume is clustered then it must be deactivated on all
nodes in the cluster before it can be removed. A single lvchange command

View File

@ -18,7 +18,7 @@
static int lvremove_single(struct cmd_context *cmd, struct logical_volume *lv,
void *handle __attribute((unused)))
{
if (!lv_remove_single(cmd, lv, arg_count(cmd, force_ARG)))
if (!lv_remove_with_dependencies(cmd, lv, arg_count(cmd, force_ARG)))
return ECMD_FAILED;
return ECMD_PROCESSED;