From 8d3a37baa66d60ea8a0b7834121d3f9174ef3fdc Mon Sep 17 00:00:00 2001 From: David Teigland Date: Tue, 16 Jun 2015 16:24:46 -0500 Subject: Add lock_type_t with to/from string functions --- lib/display/display.c | 32 ++++++++++++++++++++++++++++++++ lib/display/display.h | 3 +++ lib/locking/lvmlockd.c | 10 +++++----- lib/locking/lvmlockd.h | 34 +++------------------------------- lib/metadata/metadata-exported.h | 8 ++++++++ tools/toollib.c | 29 +++++++++++++++++++---------- 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 @@ -51,33 +46,10 @@ #define LDST_FAIL_OTHER 0x00000020 #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. -- cgit v1.2.1