diff options
author | David Teigland <teigland@redhat.com> | 2015-03-05 14:00:44 -0600 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2015-05-19 14:00:45 -0500 |
commit | 053fd6e3ad76520913df941118dd7be0538b3a47 (patch) | |
tree | d4d2edf302cc3cf3b6646d0e93b4b2e8836e9910 | |
parent | aaad05e3d5faa9e61eb92afedd067278cd063f8b (diff) | |
download | lvm2-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.c | 11 | ||||
-rw-r--r-- | lib/format_text/import_vsn1.c | 15 | ||||
-rw-r--r-- | lib/metadata/lv.h | 2 | ||||
-rw-r--r-- | lib/metadata/vg.h | 2 |
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); |