[lvm-devel] master - lv_manip: add lv_uniq_rename_update
Zdenek Kabelac
zkabelac at sourceware.org
Mon Oct 21 13:32:59 UTC 2019
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=2266a1863f048899dc6f54c4d62ae05b33605349
Commit: 2266a1863f048899dc6f54c4d62ae05b33605349
Parent: 5714c8c9cc12d9442ad9ee85fb73a8ae49d6b548
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Mon Oct 21 09:16:45 2019 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Mon Oct 21 12:14:15 2019 +0200
lv_manip: add lv_uniq_rename_update
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 | 24 ++++++++++++++++++++++++
lib/metadata/metadata-exported.h | 2 ++
2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 815ea99..ae103d3 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -4626,6 +4626,30 @@ int lv_rename_update(struct cmd_context *cmd, struct logical_volume *lv,
}
/*
+ * 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.
*/
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index f340093..c61c85c 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -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);
More information about the lvm-devel
mailing list