[lvm-devel] LVM2 ./WHATS_NEW lib/metadata/lv_manip.c tools ...
snitzer at sourceware.org
snitzer at sourceware.org
Fri Jan 20 22:03:49 UTC 2012
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: snitzer at sourceware.org 2012-01-20 22:03:49
Modified files:
. : WHATS_NEW
lib/metadata : lv_manip.c
tools : lvconvert.c
Log message:
Allow removal of an invalid snapshot that was to be merged on next activation.
Don't allow a user to merge an invalid snapshot.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.2231&r2=1.2232
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/lv_manip.c.diff?cvsroot=lvm2&r1=1.343&r2=1.344
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvconvert.c.diff?cvsroot=lvm2&r1=1.178&r2=1.179
--- LVM2/WHATS_NEW 2012/01/20 22:03:03 1.2231
+++ LVM2/WHATS_NEW 2012/01/20 22:03:48 1.2232
@@ -1,5 +1,7 @@
Version 2.02.89 -
==================================
+ Allow removal of an invalid snapshot that was to be merged on next activation.
+ Don't allow a user to merge an invalid snapshot.
Use m and M lv_attr to indicate that a snapshot merge failed in lvs.
Differentiate between snapshot status of "Invalid" and "Merge failed".
Lookup snapshot usage percent of origin volume when a snapshot is merging.
--- LVM2/lib/metadata/lv_manip.c 2012/01/19 15:39:41 1.343
+++ LVM2/lib/metadata/lv_manip.c 2012/01/20 22:03:48 1.344
@@ -3263,15 +3263,27 @@
int lv_remove_with_dependencies(struct cmd_context *cmd, struct logical_volume *lv,
const force_t force, unsigned level)
{
+ percent_t snap_percent;
struct dm_list *snh, *snht;
struct seg_list *sl, *tsl;
+ struct lvinfo info;
if (lv_is_cow(lv)) {
- /* A merging snapshot cannot be removed directly */
+ /*
+ * A merging snapshot cannot be removed directly unless
+ * it has been invalidated.
+ */
if (lv_is_merging_cow(lv) && !level) {
- log_error("Can't remove merging snapshot logical volume \"%s\"",
- lv->name);
- return 0;
+ if (lv_info(lv->vg->cmd, lv, 0, &info, 1, 0) &&
+ info.exists && info.live_table) {
+ if (lv_snapshot_percent(lv, &snap_percent) &&
+ ((snap_percent != PERCENT_INVALID) &&
+ (snap_percent != PERCENT_MERGE_FAILED))) {
+ log_error("Can't remove merging snapshot logical volume \"%s\"",
+ lv->name);
+ return 0;
+ }
+ }
}
}
--- LVM2/tools/lvconvert.c 2012/01/20 22:02:05 1.178
+++ LVM2/tools/lvconvert.c 2012/01/20 22:03:48 1.179
@@ -1709,6 +1709,8 @@
{
struct lvconvert_params *lp = handle;
struct dm_list *failed_pvs;
+ struct lvinfo info;
+ percent_t snap_percent;
if (lv->status & LOCKED) {
log_error("Cannot convert locked LV %s", lv->name);
@@ -1742,6 +1744,13 @@
lv->name);
return ECMD_FAILED;
}
+ if (lv_info(lv->vg->cmd, lv, 0, &info, 1, 0)
+ && info.exists && info.live_table &&
+ (!lv_snapshot_percent(lv, &snap_percent) ||
+ snap_percent == PERCENT_INVALID)) {
+ log_error("Unable to merge invalidated snapshot LV \"%s\"", lv->name);
+ return ECMD_FAILED;
+ }
if (!archive(lv->vg)) {
stack;
return ECMD_FAILED;
More information about the lvm-devel
mailing list