summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2015-03-05 14:00:44 -0600
committerDavid Teigland <teigland@redhat.com>2015-05-19 14:00:45 -0500
commit053fd6e3ad76520913df941118dd7be0538b3a47 (patch)
treed4d2edf302cc3cf3b6646d0e93b4b2e8836e9910
parentaaad05e3d5faa9e61eb92afedd067278cd063f8b (diff)
downloadlvm2-053fd6e3ad76520913df941118dd7be0538b3a47.tar.gz
metadata: add lock_type and lock_args
Structs and metadata for VG and LV each have a lock_type string and a lock_args string. The VG lock_type is inherited by its LVs, but special LVs that are not locked will have no lock_type set.
-rw-r--r--lib/format_text/export.c11
-rw-r--r--lib/format_text/import_vsn1.c15
-rw-r--r--lib/metadata/lv.h2
-rw-r--r--lib/metadata/vg.h2
4 files changed, 29 insertions, 1 deletions
diff --git a/lib/format_text/export.c b/lib/format_text/export.c
index 018772eb8..8ebd3e930 100644
--- a/lib/format_text/export.c
+++ b/lib/format_text/export.c
@@ -430,8 +430,11 @@ static int _print_vg(struct formatter *f, struct volume_group *vg)
else if (vg->lvm1_system_id && *vg->lvm1_system_id)
outf(f, "system_id = \"%s\"", vg->lvm1_system_id);
- if (vg->lock_type)
+ if (vg->lock_type) {
outf(f, "lock_type = \"%s\"", vg->lock_type);
+ if (vg->lock_args)
+ outf(f, "lock_args = \"%s\"", vg->lock_args);
+ }
outsize(f, (uint64_t) vg->extent_size, "extent_size = %u",
vg->extent_size);
@@ -657,6 +660,12 @@ static int _print_lv(struct formatter *f, struct logical_volume *lv)
lv->timestamp);
}
+ if (lv->lock_type) {
+ outf(f, "lock_type = \"%s\"", lv->lock_type);
+ if (lv->lock_args)
+ outf(f, "lock_args = \"%s\"", lv->lock_args);
+ }
+
if (lv->alloc != ALLOC_INHERIT)
outf(f, "allocation_policy = \"%s\"",
get_alloc_string(lv->alloc));
diff --git a/lib/format_text/import_vsn1.c b/lib/format_text/import_vsn1.c
index 3030bad5a..0cb470f02 100644
--- a/lib/format_text/import_vsn1.c
+++ b/lib/format_text/import_vsn1.c
@@ -573,6 +573,16 @@ static int _read_lvnames(struct format_instance *fid __attribute__((unused)),
return 0;
}
+ if (dm_config_get_str(lvn, "lock_type", &str)) {
+ if (!(lv->lock_type = dm_pool_strdup(mem, str)))
+ return_0;
+ }
+
+ if (dm_config_get_str(lvn, "lock_args", &str)) {
+ if (!(lv->lock_args = dm_pool_strdup(mem, str)))
+ return_0;
+ }
+
lv->alloc = ALLOC_INHERIT;
if (dm_config_get_str(lvn, "allocation_policy", &str)) {
lv->alloc = get_alloc_from_string(str);
@@ -789,6 +799,11 @@ static struct volume_group *_read_vg(struct format_instance *fid,
goto bad;
}
+ if (dm_config_get_str(vgn, "lock_args", &str)) {
+ if (!(vg->lock_args = dm_pool_strdup(vg->vgmem, str)))
+ goto bad;
+ }
+
if (!_read_id(&vg->id, vgn, "id")) {
log_error("Couldn't read uuid for volume group %s.", vg->name);
goto bad;
diff --git a/lib/metadata/lv.h b/lib/metadata/lv.h
index 44750851a..2765b465f 100644
--- a/lib/metadata/lv.h
+++ b/lib/metadata/lv.h
@@ -52,6 +52,8 @@ struct logical_volume {
uint64_t timestamp;
const char *hostname;
+ const char *lock_type;
+ const char *lock_args;
};
struct lv_with_info_and_seg_status;
diff --git a/lib/metadata/vg.h b/lib/metadata/vg.h
index b0ab12217..a968eb423 100644
--- a/lib/metadata/vg.h
+++ b/lib/metadata/vg.h
@@ -71,6 +71,7 @@ struct volume_group {
const char *system_id;
char *lvm1_system_id;
const char *lock_type;
+ const char *lock_args;
uint32_t extent_size;
uint32_t extent_count;
@@ -153,6 +154,7 @@ uint64_t vg_status(const struct volume_group *vg);
int vg_set_alloc_policy(struct volume_group *vg, alloc_policy_t alloc);
int vg_set_clustered(struct volume_group *vg, int clustered);
int vg_set_system_id(struct volume_group *vg, const char *system_id);
+int vg_set_lock_type(struct volume_group *vg, const char *lock_type);
uint64_t vg_size(const struct volume_group *vg);
uint64_t vg_free(const struct volume_group *vg);
uint64_t vg_extent_size(const struct volume_group *vg);