diff options
author | Peter Rajnoha <prajnoha@redhat.com> | 2016-02-19 15:35:44 +0100 |
---|---|---|
committer | Peter Rajnoha <prajnoha@redhat.com> | 2016-02-19 15:35:44 +0100 |
commit | f6af4507cf023e6dac85cf0f530dc67487d3c27a (patch) | |
tree | fbb98ea1790de8b9491176a394154088f3898ca2 | |
parent | c7bce183631dcad49679b0b19689548d01b1ad56 (diff) | |
download | lvm2-dev-prajnoha-track-removed-lvs-old-1.tar.gz |
lv: also look at any former LVs when checking LV name availabilitydev-prajnoha-track-removed-lvs-old-1
-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; |