Rename merging snapshot to "snapshot%d". Names beginning with "snapshot" are reserved. Renaming is done so that the user is not blocked from using the original name again. The merging snapshot remains hidden and is automatically removed when the merging ends. Signed-off-by: Mikulas Patocka --- tools/lvconvert.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) Index: LVM2.2.02.39/tools/lvconvert.c =================================================================== --- LVM2.2.02.39.orig/tools/lvconvert.c 2008-08-04 20:42:35.000000000 +0200 +++ LVM2.2.02.39/tools/lvconvert.c 2008-08-04 20:42:39.000000000 +0200 @@ -807,6 +807,8 @@ 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; + char *new_name; + const char *lv_name; if (cow_seg->status & SNAPSHOT_MERGE) { log_error("Snapshot %s is already merging", lv->name); @@ -830,12 +832,26 @@ static int lvconvert_merge(struct cmd_co } } + lv_name = lv->name; + cow_seg->status |= SNAPSHOT_MERGE; origin->merging_snapshot = cow_seg; if (lp->merge == MERGE_AS_SNAPSHOT) swap_lvids(origin, lv); + new_name = dm_pool_alloc(cmd->mem, NAME_LEN); + if (!new_name) { + log_error("Failed to allocate memory for the new name"); + return 0; + } + if (!generate_lv_name(lv->vg, "snapshot%d", new_name, NAME_LEN)) { + log_error("Failed to generate unique name for the new volume"); + return 0; + } + lv->name = new_name; + cow_seg->lv->status &= ~VISIBLE_LV; + /* store vg on disk(s) */ if (!vg_write(lv->vg)) return_0; @@ -849,7 +865,7 @@ static int lvconvert_merge(struct cmd_co } if (!deactivate_lv_no_snap(cmd, lv)) { - log_error("Failed to deactivate merging snapshot %s", lv->name); + log_error("Failed to deactivate merging snapshot %s", lv_name); vg_revert(lv->vg); return 0; } @@ -865,7 +881,7 @@ static int lvconvert_merge(struct cmd_co lp->need_polling = 1; lp->lv_to_poll = origin; - log_print("Merging of volume %s started.", lv->name); + log_print("Merging of volume %s started.", lv_name); return 1; }