summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2015-06-16 16:24:46 -0500
committerDavid Teigland <teigland@redhat.com>2015-06-16 16:24:46 -0500
commit8d3a37baa66d60ea8a0b7834121d3f9174ef3fdc (patch)
tree76560bebd2040c7ef966b66e1c6c9dd6b89d92c4
parente2c43a889b6208a0fb04cf9b5538c441d04a9d44 (diff)
downloadlvm2-dev-dct-lvmlockd-AO.tar.gz
Add lock_type_t with to/from string functionsdev-dct-lvmlockd-AO
-rw-r--r--lib/display/display.c32
-rw-r--r--lib/display/display.h3
-rw-r--r--lib/locking/lvmlockd.c10
-rw-r--r--lib/locking/lvmlockd.h34
-rw-r--r--lib/metadata/metadata-exported.h8
-rw-r--r--tools/toollib.c29
6 files changed, 70 insertions, 46 deletions
diff --git a/lib/display/display.c b/lib/display/display.c
index 2cc5d27d8..438551897 100644
--- a/lib/display/display.c
+++ b/lib/display/display.c
@@ -86,6 +86,38 @@ alloc_policy_t get_alloc_from_string(const char *str)
return ALLOC_INVALID;
}
+const char *get_lock_type_string(lock_type_t lock_type)
+{
+ switch (lock_type) {
+ case LOCK_TYPE_INVALID:
+ return "invalid";
+ case LOCK_TYPE_NONE:
+ return "none";
+ case LOCK_TYPE_CLVM:
+ return "clvm";
+ case LOCK_TYPE_DLM:
+ return "dlm";
+ case LOCK_TYPE_SANLOCK:
+ return "sanlock";
+ }
+ return "invalid";
+}
+
+lock_type_t get_lock_type_from_string(const char *str)
+{
+ if (!str)
+ return LOCK_TYPE_NONE;
+ if (!strcmp(str, "none"))
+ return LOCK_TYPE_NONE;
+ if (!strcmp(str, "clvm"))
+ return LOCK_TYPE_CLVM;
+ if (!strcmp(str, "dlm"))
+ return LOCK_TYPE_DLM;
+ if (!strcmp(str, "sanlock"))
+ return LOCK_TYPE_SANLOCK;
+ return LOCK_TYPE_INVALID;
+}
+
static const char *_percent_types[7] = { "NONE", "VG", "FREE", "LV", "PVS", "ORIGIN" };
const char *get_percent_string(percent_type_t def)
diff --git a/lib/display/display.h b/lib/display/display.h
index cc5654b61..f4e766c09 100644
--- a/lib/display/display.h
+++ b/lib/display/display.h
@@ -64,6 +64,9 @@ const char *get_alloc_string(alloc_policy_t alloc);
char alloc_policy_char(alloc_policy_t alloc);
alloc_policy_t get_alloc_from_string(const char *str);
+const char *get_lock_type_string(lock_type_t lock_type);
+lock_type_t get_lock_type_from_string(const char *str);
+
const char *get_percent_string(percent_type_t def);
char yes_no_prompt(const char *prompt, ...) __attribute__ ((format(printf, 1, 2)));
diff --git a/lib/locking/lvmlockd.c b/lib/locking/lvmlockd.c
index 1c7add7d1..2528933b5 100644
--- a/lib/locking/lvmlockd.c
+++ b/lib/locking/lvmlockd.c
@@ -769,7 +769,7 @@ static int _free_vg_sanlock(struct cmd_context *cmd, struct volume_group *vg)
int lockd_init_vg(struct cmd_context *cmd, struct volume_group *vg,
const char *lock_type)
{
- switch (lock_type_to_num(lock_type)) {
+ switch (get_lock_type_from_string(lock_type)) {
case LOCK_TYPE_NONE:
case LOCK_TYPE_CLVM:
return 1;
@@ -790,7 +790,7 @@ int lockd_free_vg_before(struct cmd_context *cmd, struct volume_group *vg)
if (cmd->lock_vg_mode && !strcmp(cmd->lock_vg_mode, "na"))
return 1;
- switch (lock_type_to_num(vg->lock_type)) {
+ switch (get_lock_type_from_string(vg->lock_type)) {
case LOCK_TYPE_NONE:
case LOCK_TYPE_CLVM:
case LOCK_TYPE_DLM:
@@ -811,7 +811,7 @@ void lockd_free_vg_final(struct cmd_context *cmd, struct volume_group *vg)
if (cmd->lock_vg_mode && !strcmp(cmd->lock_vg_mode, "na"))
return;
- switch (lock_type_to_num(vg->lock_type)) {
+ switch (get_lock_type_from_string(vg->lock_type)) {
case LOCK_TYPE_NONE:
case LOCK_TYPE_CLVM:
case LOCK_TYPE_SANLOCK:
@@ -2087,7 +2087,7 @@ int lockd_init_lv_args(struct cmd_context *cmd, struct volume_group *vg,
int lockd_init_lv(struct cmd_context *cmd, struct volume_group *vg, struct logical_volume *lv,
struct lvcreate_params *lp)
{
- int lock_type_num = lock_type_to_num(vg->lock_type);
+ int lock_type_num = get_lock_type_from_string(vg->lock_type);
if (cmd->lock_lv_mode && !strcmp(cmd->lock_lv_mode, "na"))
return 1;
@@ -2211,7 +2211,7 @@ int lockd_free_lv(struct cmd_context *cmd, struct volume_group *vg,
if (cmd->lock_lv_mode && !strcmp(cmd->lock_lv_mode, "na"))
return 1;
- switch (lock_type_to_num(vg->lock_type)) {
+ switch (get_lock_type_from_string(vg->lock_type)) {
case LOCK_TYPE_NONE:
case LOCK_TYPE_CLVM:
return 1;
diff --git a/lib/locking/lvmlockd.h b/lib/locking/lvmlockd.h
index 33d3e04e5..6db632df0 100644
--- a/lib/locking/lvmlockd.h
+++ b/lib/locking/lvmlockd.h
@@ -16,11 +16,6 @@
#define LOCKD_SANLOCK_LV_NAME "lvmlock"
-#define LOCK_TYPE_NONE 0
-#define LOCK_TYPE_CLVM 1
-#define LOCK_TYPE_DLM 2
-#define LOCK_TYPE_SANLOCK 3
-
/* lockd_gl flags */
#define LDGL_MODE_NOARG 0x00000001
#define LDGL_SKIP_CACHE_VALIDATE 0x00000002
@@ -52,32 +47,9 @@
#define LDST_FAIL (LDST_FAIL_REQUEST | LDST_FAIL_NOLS | LDST_FAIL_STARTING | LDST_FAIL_OTHER)
/*
- * lock_type lock_type_num
- * "none" -> LOCK_TYPE_NONE
- * "clvm" -> LOCK_TYPE_CLVM
- * "dlm -> LOCK_TYPE_DLM
- * "sanlock" -> LOCK_TYPE_SANLOCK
- */
-
-static inline int lock_type_to_num(const char *lock_type)
-{
- if (!lock_type)
- return LOCK_TYPE_NONE;
- if (!strcmp(lock_type, "none"))
- return LOCK_TYPE_NONE;
- if (!strcmp(lock_type, "clvm"))
- return LOCK_TYPE_CLVM;
- if (!strcmp(lock_type, "dlm"))
- return LOCK_TYPE_DLM;
- if (!strcmp(lock_type, "sanlock"))
- return LOCK_TYPE_SANLOCK;
- return -1;
-}
-
-/*
* Check if a lock_type uses lvmlockd.
* If not (none, clvm), return 0.
- * If so (dlm, sanlock), return > 0 (LOCK_TYPE_)
+ * If so (dlm, sanlock), return 1.
*/
static inline int is_lockd_type(const char *lock_type)
@@ -86,9 +58,9 @@ static inline int is_lockd_type(const char *lock_type)
return 0;
if (!strcmp(lock_type, "dlm"))
- return LOCK_TYPE_DLM;
+ return 1;
if (!strcmp(lock_type, "sanlock"))
- return LOCK_TYPE_SANLOCK;
+ return 1;
return 0;
}
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index 734b76a9f..cda8e28e8 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -264,6 +264,14 @@ typedef enum {
THIN_DISCARDS_PASSDOWN,
} thin_discards_t;
+typedef enum {
+ LOCK_TYPE_INVALID = -1,
+ LOCK_TYPE_NONE = 0,
+ LOCK_TYPE_CLVM = 1,
+ LOCK_TYPE_DLM = 2,
+ LOCK_TYPE_SANLOCK = 3,
+} lock_type_t;
+
struct cmd_context;
struct format_handler;
struct labeller;
diff --git a/tools/toollib.c b/tools/toollib.c
index 442995e60..8eb253343 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -728,7 +728,7 @@ int vgcreate_params_set_from_args(struct cmd_context *cmd,
int locking_type;
int use_lvmlockd;
int use_clvmd;
- int lock_type_num; /* LOCK_TYPE_ */
+ lock_type_t lock_type_num;
vp_new->vg_name = skip_dev_dir(cmd, vp_def->vg_name, NULL);
vp_new->max_lv = arg_uint_value(cmd, maxlogicalvolumes_ARG,
@@ -929,18 +929,27 @@ int vgcreate_params_set_from_args(struct cmd_context *cmd,
* Check that the lock_type is recognized, and is being
* used with the correct lvm.conf settings.
*/
- lock_type_num = lock_type_to_num(lock_type);
+ lock_type_num = get_lock_type_from_string(lock_type);
- if (lock_type_num < 0) {
+ switch (lock_type_num) {
+ case LOCK_TYPE_INVALID:
log_error("lock_type %s is invalid", lock_type);
return 0;
- } else if ((lock_type_num == LOCK_TYPE_DLM || lock_type_num == LOCK_TYPE_SANLOCK) && !use_lvmlockd) {
- log_error("lock_type %s requires use_lvmlockd configuration setting", lock_type);
- return 0;
- } else if ((lock_type_num == LOCK_TYPE_CLVM) && !use_clvmd) {
- log_error("lock_type clvm requires locking_type 3 configuration setting");
- return 0;
- }
+
+ case LOCK_TYPE_SANLOCK:
+ case LOCK_TYPE_DLM:
+ if (!use_lvmlockd) {
+ log_error("lock_type %s requires use_lvmlockd configuration setting", lock_type);
+ return 0;
+ }
+ break;
+ case LOCK_TYPE_CLVM:
+ if (!use_clvmd) {
+ log_error("lock_type clvm requires locking_type 3 configuration setting");
+ return 0;
+ }
+ break;
+ };
/*
* The vg is not owned by one host/system_id.