summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Wysochanski <dwysocha@redhat.com>2010-02-24 18:15:49 +0000
committerDave Wysochanski <dwysocha@redhat.com>2010-02-24 18:15:49 +0000
commitcd69ee74535333f8d4ae7141e42b76a89fcfcb31 (patch)
tree7031fcee4e6f7069c8d76cc0155d6b887dd7ca8c
parentaee205752abdd9d05e67b953c2bc1f5d626dd808 (diff)
downloadlvm2-cd69ee74535333f8d4ae7141e42b76a89fcfcb31.tar.gz
lvm2-cd69ee74535333f8d4ae7141e42b76a89fcfcb31.tar.xz
lvm2-cd69ee74535333f8d4ae7141e42b76a89fcfcb31.zip
Refactor lvchange_tag() to call lv_change_tag() library function.
Similar refactoring to vgchange - pull out common parts and put into library function for reuse. Should be no functional change. Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
-rw-r--r--lib/metadata/metadata-exported.h2
-rw-r--r--lib/metadata/metadata.c24
-rw-r--r--tools/lvchange.c21
3 files changed, 28 insertions, 19 deletions
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index fae9551f..95402852 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -493,6 +493,8 @@ struct logical_volume *lv_create_empty(const char *name,
int set_lv(struct cmd_context *cmd, struct logical_volume *lv,
uint64_t sectors, int value);
+int lv_change_tag(struct logical_volume *lv, const char *tag, int add_tag);
+
/* Reduce the size of an LV by extents */
int lv_reduce(struct logical_volume *lv, uint32_t extents);
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 52bbc46c..2b8a1be0 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -665,6 +665,30 @@ int vg_reduce(struct volume_group *vg, char *pv_name)
return 0;
}
+int lv_change_tag(struct logical_volume *lv, const char *tag, int add_tag)
+{
+ if (!(lv->vg->fid->fmt->features & FMT_TAGS)) {
+ log_error("Logical volume %s/%s does not support tags",
+ lv->vg->name, lv->name);
+ return 0;
+ }
+
+ if (add_tag) {
+ if (!str_list_add(lv->vg->vgmem, &lv->tags, tag)) {
+ log_error("Failed to add tag %s to %s/%s",
+ tag, lv->vg->name, lv->name);
+ return 0;
+ }
+ } else {
+ if (!str_list_del(&lv->tags, tag)) {
+ log_error("Failed to remove tag %s from %s/%s",
+ tag, lv->vg->name, lv->name);
+ return 0;
+ }
+ }
+ return 1;
+}
+
int vg_change_tag(struct volume_group *vg, const char *tag, int add_tag)
{
if (!(vg->fid->fmt->features & FMT_TAGS)) {
diff --git a/tools/lvchange.c b/tools/lvchange.c
index 5118e510..2d7955e8 100644
--- a/tools/lvchange.c
+++ b/tools/lvchange.c
@@ -500,25 +500,8 @@ static int lvchange_tag(struct cmd_context *cmd, struct logical_volume *lv,
return 0;
}
- if (!(lv->vg->fid->fmt->features & FMT_TAGS)) {
- log_error("Logical volume %s/%s does not support tags",
- lv->vg->name, lv->name);
- return 0;
- }
-
- if ((arg == addtag_ARG)) {
- if (!str_list_add(cmd->mem, &lv->tags, tag)) {
- log_error("Failed to add tag %s to %s/%s",
- tag, lv->vg->name, lv->name);
- return 0;
- }
- } else {
- if (!str_list_del(&lv->tags, tag)) {
- log_error("Failed to remove tag %s from %s/%s",
- tag, lv->vg->name, lv->name);
- return 0;
- }
- }
+ if (!lv_change_tag(lv, tag, arg == addtag_ARG))
+ return_0;
log_very_verbose("Updating logical volume \"%s\" on disk(s)", lv->name);