]> sourceware.org Git - lvm2.git/commitdiff
lv_manip: add lv_uniq_rename_update
authorZdenek Kabelac <zkabelac@redhat.com>
Mon, 21 Oct 2019 07:16:45 +0000 (09:16 +0200)
committerZdenek Kabelac <zkabelac@redhat.com>
Mon, 21 Oct 2019 10:14:15 +0000 (12:14 +0200)
Add function to rename LV to either passed name or if
the name is already in use, generate new lvol% name.

lib/metadata/lv_manip.c
lib/metadata/metadata-exported.h

index 815ea9976e569610d5d641c46c963f2a982d8902..ae103d31ab99316f197dac451c7269c5ba399881 100644 (file)
@@ -4625,6 +4625,30 @@ int lv_rename_update(struct cmd_context *cmd, struct logical_volume *lv,
        return 1;
 }
 
+/*
+ * Rename LV to new name, if name is occupies, lvol% is generated.
+ * VG must be locked by caller.
+ */
+int lv_uniq_rename_update(struct cmd_context *cmd, struct logical_volume *lv,
+                         const char *new_name, int update_mda)
+{
+       char uniq_name[NAME_LEN];
+
+       /* If the name is in use, generate new lvol%d */
+       if (lv_name_is_used_in_vg(lv->vg, new_name, NULL)) {
+               if (!generate_lv_name(lv->vg, "lvol%d", uniq_name, sizeof(uniq_name))) {
+                       log_error("Failed to generate unique name for unused logical volume.");
+                       return 0;
+               }
+               new_name = uniq_name;
+       }
+
+       if (!lv_rename_update(cmd, lv, new_name, 0))
+               return_0;
+
+       return 1;
+}
+
 /*
  * Core of LV renaming routine.
  * VG must be locked by caller.
index f340093196b1b6dc603034c93f554640c63cdd47..c61c85c7e6e087bdfada289960bdaf266f389342 100644 (file)
@@ -845,6 +845,8 @@ int lv_rename(struct cmd_context *cmd, struct logical_volume *lv,
              const char *new_name);
 int lv_rename_update(struct cmd_context *cmd, struct logical_volume *lv,
                     const char *new_name, int update_mda);
+int lv_uniq_rename_update(struct cmd_context *cmd, struct logical_volume *lv,
+                         const char *new_name, int update_mda);
 
 /* Updates and reloads metadata for given lv */
 int lv_update_and_reload(struct logical_volume *lv);
This page took 0.042329 seconds and 5 git commands to generate.