diff options
Diffstat (limited to 'lib/metadata/lv_manip.c')
-rw-r--r-- | lib/metadata/lv_manip.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c index 050eba5be..ad1983e6a 100644 --- a/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c @@ -5328,6 +5328,7 @@ char *generate_lv_name(struct volume_group *vg, const char *format, char *buffer, size_t len) { struct lv_list *lvl; + struct glv_list *glvl; int high = -1, i; dm_list_iterate_items(lvl, &vg->lvs) { @@ -5338,6 +5339,14 @@ char *generate_lv_name(struct volume_group *vg, const char *format, high = i; } + dm_list_iterate_items(glvl, &vg->former_lvs) { + if (sscanf(glvl->glv->former->name, format, &i) != 1) + continue; + + if (i > high) + high = i; + } + if (dm_snprintf(buffer, len, format, high + 1) < 0) return NULL; @@ -5478,7 +5487,8 @@ struct logical_volume *lv_create_empty(const char *name, log_error("Failed to generate unique name for the new " "logical volume"); return NULL; - } else if (find_lv_in_vg(vg, name)) { + } else if (find_lv_in_vg(vg, name) || + find_former_glv(vg, name, NULL)) { log_error("Unable to create LV %s in Volume Group %s: " "name already in use.", name, vg->name); return NULL; |