summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Wysochanski <dwysocha@redhat.com>2010-02-24 18:15:05 +0000
committerDave Wysochanski <dwysocha@redhat.com>2010-02-24 18:15:05 +0000
commite17bcc743207dc90e81e04e7edba0d2210a98cf5 (patch)
treed0d03b543519d08312e729466f526df8a5010c2b
parentf59b0f3e07113d25ea4316ebc677e813e7d13482 (diff)
downloadlvm2-e17bcc743207dc90e81e04e7edba0d2210a98cf5.tar.gz
lvm2-e17bcc743207dc90e81e04e7edba0d2210a98cf5.tar.xz
lvm2-e17bcc743207dc90e81e04e7edba0d2210a98cf5.zip
Refactor _vgchange_tag() to vg_change_tag() library function.
Pull out common code to be called from tools as well as lvm2app. Leave archive() at tool level so we can use from vgcreate as well as vgchange. Should be no functional change. - add stack macro in vgchange Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
-rw-r--r--lib/metadata/metadata-exported.h1
-rw-r--r--lib/metadata/metadata.c23
-rw-r--r--tools/vgchange.c20
3 files changed, 27 insertions, 17 deletions
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index 164ce36d..fae9551f 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -463,6 +463,7 @@ int vg_rename(struct cmd_context *cmd, struct volume_group *vg,
int vg_extend(struct volume_group *vg, int pv_count, char **pv_names,
struct pvcreate_params *pp);
int vg_reduce(struct volume_group *vg, char *pv_name);
+int vg_change_tag(struct volume_group *vg, const char *tag, int add_tag);
int vg_set_extent_size(struct volume_group *vg, uint32_t new_extent_size);
int vg_set_max_lv(struct volume_group *vg, uint32_t max_lv);
int vg_set_max_pv(struct volume_group *vg, uint32_t max_pv);
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index b3b3778c..52bbc46c 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -665,6 +665,29 @@ int vg_reduce(struct volume_group *vg, char *pv_name)
return 0;
}
+int vg_change_tag(struct volume_group *vg, const char *tag, int add_tag)
+{
+ if (!(vg->fid->fmt->features & FMT_TAGS)) {
+ log_error("Volume group %s does not support tags", vg->name);
+ return 0;
+ }
+
+ if (add_tag) {
+ if (!str_list_add(vg->vgmem, &vg->tags, tag)) {
+ log_error("Failed to add tag %s to volume group %s",
+ tag, vg->name);
+ return 0;
+ }
+ } else {
+ if (!str_list_del(&vg->tags, tag)) {
+ log_error("Failed to remove tag %s from volume group "
+ "%s", tag, vg->name);
+ return 0;
+ }
+ }
+ return 1;
+}
+
const char *strip_dir(const char *vg_name, const char *dev_dir)
{
size_t len = strlen(dev_dir);
diff --git a/tools/vgchange.c b/tools/vgchange.c
index b4f5d003..6d869f96 100644
--- a/tools/vgchange.c
+++ b/tools/vgchange.c
@@ -447,28 +447,14 @@ static int _vgchange_tag(struct cmd_context *cmd, struct volume_group *vg,
return ECMD_FAILED;
}
- if (!(vg->fid->fmt->features & FMT_TAGS)) {
- log_error("Volume group %s does not support tags", vg->name);
- return ECMD_FAILED;
- }
-
if (!archive(vg)) {
stack;
return ECMD_FAILED;
}
- if ((arg == addtag_ARG)) {
- if (!str_list_add(cmd->mem, &vg->tags, tag)) {
- log_error("Failed to add tag %s to volume group %s",
- tag, vg->name);
- return ECMD_FAILED;
- }
- } else {
- if (!str_list_del(&vg->tags, tag)) {
- log_error("Failed to remove tag %s from volume group "
- "%s", tag, vg->name);
- return ECMD_FAILED;
- }
+ if (!vg_change_tag(vg, tag, arg == addtag_ARG)) {
+ stack;
+ return ECMD_FAILED;
}
if (!vg_write(vg) || !vg_commit(vg)) {