diff options
author | Alasdair G Kergon <agk@redhat.com> | 2016-08-11 23:31:49 +0100 |
---|---|---|
committer | Alasdair G Kergon <agk@redhat.com> | 2016-08-11 23:31:49 +0100 |
commit | 93b61c07eb14f6185c708bd74f7e471b50cf251b (patch) | |
tree | fd37217015c91792583dd996f04b3a94ddb452e6 | |
parent | e30fb19030823cd8bb181e2b494488c18c187850 (diff) | |
download | lvm2-93b61c07eb14f6185c708bd74f7e471b50cf251b.tar.gz |
raid: Avoid double suffix on rmeta LV name paired with rimage LV.
-rw-r--r-- | WHATS_NEW | 1 | ||||
-rw-r--r-- | lib/metadata/raid_manip.c | 23 |
2 files changed, 20 insertions, 4 deletions
@@ -1,5 +1,6 @@ Version 2.02.164 - =================================== + Avoid double suffix when naming _rmeta LV paired with _rimage LV. Version 2.02.163 - 10th August 2016 =================================== diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c index c1cff3383..ce560fe69 100644 --- a/lib/metadata/raid_manip.c +++ b/lib/metadata/raid_manip.c @@ -108,6 +108,22 @@ static void _check_and_adjust_region_size(const struct logical_volume *lv) return _ensure_min_region_size(lv); } +/* Strip any raid suffix off LV name */ +static char *_top_level_raid_lv_name(struct logical_volume *lv) +{ + char *new_lv_name, *suffix; + + if (!(new_lv_name = dm_pool_strdup(lv->vg->vgmem, lv->name))) { + log_error("Failed to allocate string for new LV name."); + return NULL; + } + + if ((suffix = first_substring(new_lv_name, "_rimage_", "_mimage_", NULL))) + *suffix = '\0'; + + return new_lv_name; +} + static int _lv_is_raid_with_tracking(const struct logical_volume *lv, struct logical_volume **tracking) { @@ -679,7 +695,7 @@ static int _alloc_rmeta_for_lv(struct logical_volume *data_lv, struct dm_list allocatable_pvs; struct alloc_handle *ah; struct lv_segment *seg = first_seg(data_lv); - char *p, base_name[NAME_LEN]; + char *base_name; dm_list_init(&allocatable_pvs); @@ -699,9 +715,8 @@ static int _alloc_rmeta_for_lv(struct logical_volume *data_lv, return 0; } - (void) dm_strncpy(base_name, data_lv->name, sizeof(base_name)); - if ((p = strstr(base_name, "_mimage_"))) - *p = '\0'; + if (!(base_name = _top_level_raid_lv_name(data_lv))) + return_0; if (!(ah = allocate_extents(data_lv->vg, NULL, seg->segtype, 0, 1, 0, seg->region_size, |