Do not allow merging over mounted logical volumes. When preserving origin, check that the snapshot is not mounted. Signed-off-by: Mikulas Patocka --- tools/lvconvert.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) Index: LVM2.2.02.39/tools/lvconvert.c =================================================================== --- LVM2.2.02.39.orig/tools/lvconvert.c 2008-08-04 20:42:32.000000000 +0200 +++ LVM2.2.02.39/tools/lvconvert.c 2008-08-04 20:42:35.000000000 +0200 @@ -806,6 +806,7 @@ static int lvconvert_merge(struct cmd_co { struct logical_volume *origin = origin_from_cow(lv); struct lv_segment *cow_seg = find_cow(lv); + struct lvinfo info; if (cow_seg->status & SNAPSHOT_MERGE) { log_error("Snapshot %s is already merging", lv->name); @@ -816,6 +817,19 @@ static int lvconvert_merge(struct cmd_co return 0; } + if (lv_info(cmd, origin, &info, 1, 0)) { + if (info.open_count) { + log_error("Can't merge over open origin volume"); + return 0; + } + } + if (lv_info(cmd, lv, &info, 1, 0)) { + if (info.open_count && lp->merge != MERGE_AS_SNAPSHOT) { + log_error("Can't merge when snapshot is open"); + return 0; + } + } + cow_seg->status |= SNAPSHOT_MERGE; origin->merging_snapshot = cow_seg;