]> sourceware.org Git - lvm2.git/commitdiff
cachevol: generate a unique name when creating
authorDavid Teigland <teigland@redhat.com>
Thu, 23 Jul 2020 18:07:32 +0000 (13:07 -0500)
committerDavid Teigland <teigland@redhat.com>
Thu, 23 Jul 2020 18:18:22 +0000 (13:18 -0500)
When a cachevol is automatically created, if the default name
conflicts with an existing name, generate a new unique name.

test/shell/cachevol-cachedevice.sh
tools/lvconvert.c

index 11a37d9cdc02e0faee11ae9433cc7e0751344f96..3831ee9d4d2fdcc8f13b93b048400edaffd1a013 100644 (file)
@@ -208,5 +208,15 @@ lvchange -ay $vg/$lv1
 lvchange -an $vg/$lv1
 lvremove $vg/$lv1
 
+# if the cache name is used generate a new name
+lvcreate -n $lv1 -l8 -an $vg @slow
+lvcreate -n ${lv1}_cache -l1 -an $vg @slow
+lvconvert -y --type writecache --cachedevice @fast --cachesize 8M $vg/$lv1
+check lv_field $vg/$lv1 segtype writecache
+check lv_field $vg/${lv1}_cache0_cvol lv_size "8.00m"
+lvchange -ay $vg/$lv1
+lvchange -an $vg/$lv1
+lvremove $vg/$lv1
+
 vgremove -ff $vg
 
index b6505c1a98eef5e5798913be869d6a5b73af1b68..524ed5a332e6556fe6a18c9619c6415bee761497 100644 (file)
@@ -4267,6 +4267,7 @@ static int _lv_create_cachevol(struct cmd_context *cmd,
                               struct logical_volume **cachevol_lv)
 {
        char cvname[NAME_LEN];
+       char format[NAME_LEN];
        struct dm_list *use_pvh;
        struct pv_list *pvl;
        char *dev_name;
@@ -4373,6 +4374,19 @@ static int _lv_create_cachevol(struct cmd_context *cmd,
                return 0;
        }
 
+       if (find_lv(vg, cvname)) {
+               memset(format, 0, sizeof(cvname));
+               memset(cvname, 0, sizeof(cvname));
+               if (dm_snprintf(format, sizeof(format), "%s_cache%%d", lv->name) < 0) {
+                       log_error("Failed to generate cachevol LV format.");
+                       return 0;
+               }
+               if (!generate_lv_name(vg, format, cvname, sizeof(cvname))) {
+                       log_error("Failed to generate cachevol LV name.");
+                       return 0;
+               }
+       }
+
        lp.lv_name = cvname;
        lp.pvh = use_pvh;
        lp.extents = cache_size_sectors / vg->extent_size;
This page took 0.044243 seconds and 5 git commands to generate.