From 54d7741a3e3b211547aa76cdfcb1426560effc92 Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Thu, 29 Apr 2010 01:38:12 +0000 Subject: [PATCH] Remove no-longer-used arg_ptr_value. Fix -M and --type to use strings not pointers that change on config refresh. --- WHATS_NEW | 3 +++ lib/commands/toolcontext.c | 23 ++++++++++++++++++----- lib/commands/toolcontext.h | 4 +++- tools/lvcreate.c | 4 +--- tools/lvmcmdline.c | 30 ++++++++---------------------- tools/lvresize.c | 3 ++- tools/tools.h | 2 +- 7 files changed, 36 insertions(+), 33 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index d0844e411..4980de1e4 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,8 @@ Version 2.02.64 - ================================= + Remove no-longer-used arg_ptr_value. + Fix -M and --type to use strings not pointers that change on config refresh. + Fix regression in down-convert of mirror images with partial PV specification. Fix lvconvert error message when existing mirrored LV is not found. Disallow the direct removal of a merging snapshot. Set appropriate udev flags for reserved LVs. diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c index 818e4527f..20fd62e78 100644 --- a/lib/commands/toolcontext.c +++ b/lib/commands/toolcontext.c @@ -733,6 +733,19 @@ static int _init_filters(struct cmd_context *cmd, unsigned load_persistent_cache return 1; } +struct format_type *get_format_by_name(struct cmd_context *cmd, const char *format) +{ + struct format_type *fmt; + + dm_list_iterate_items(fmt, &cmd->formats) + if (!strcasecmp(fmt->name, format) || + !strcasecmp(fmt->name + 3, format) || + (fmt->alias && !strcasecmp(fmt->alias, format))) + return fmt; + + return NULL; +} + static int _init_formats(struct cmd_context *cmd) { const char *format; @@ -806,8 +819,8 @@ static int _init_formats(struct cmd_context *cmd) dm_list_iterate_items(fmt, &cmd->formats) { if (!strcasecmp(fmt->name, format) || (fmt->alias && !strcasecmp(fmt->alias, format))) { - cmd->default_settings.fmt = fmt; - cmd->fmt = cmd->default_settings.fmt; + cmd->default_settings.fmt_name = fmt->name; + cmd->fmt = fmt; return 1; } } @@ -1190,7 +1203,7 @@ out: return cmd; } -static void _destroy_formats(struct dm_list *formats) +static void _destroy_formats(struct cmd_context *cmd, struct dm_list *formats) { struct dm_list *fmtl, *tmp; struct format_type *fmt; @@ -1268,7 +1281,7 @@ int refresh_toolcontext(struct cmd_context *cmd) lvmcache_destroy(cmd, 0); label_exit(); _destroy_segtypes(&cmd->segtypes); - _destroy_formats(&cmd->formats); + _destroy_formats(cmd, &cmd->formats); if (cmd->filter) { cmd->filter->destroy(cmd->filter); cmd->filter = NULL; @@ -1329,7 +1342,7 @@ void destroy_toolcontext(struct cmd_context *cmd) lvmcache_destroy(cmd, 0); label_exit(); _destroy_segtypes(&cmd->segtypes); - _destroy_formats(&cmd->formats); + _destroy_formats(cmd, &cmd->formats); if (cmd->filter) cmd->filter->destroy(cmd->filter); if (cmd->mem) diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h index eac572179..94f7f12d4 100644 --- a/lib/commands/toolcontext.h +++ b/lib/commands/toolcontext.h @@ -38,7 +38,7 @@ struct config_info { int udev_sync; int cache_vgmetadata; const char *msg_prefix; - struct format_type *fmt; + const char *fmt_name; uint64_t unit_factor; int cmd_name; /* Show command name? */ mode_t umask; @@ -110,4 +110,6 @@ int refresh_filters(struct cmd_context *cmd); int config_files_changed(struct cmd_context *cmd); int init_lvmcache_orphans(struct cmd_context *cmd); +struct format_type *get_format_by_name(struct cmd_context *cmd, const char *format); + #endif diff --git a/tools/lvcreate.c b/tools/lvcreate.c index 89687187b..9da606e12 100644 --- a/tools/lvcreate.c +++ b/tools/lvcreate.c @@ -330,9 +330,7 @@ static int _lvcreate_params(struct lvcreate_params *lp, /* * Check selected options are compatible and determine segtype */ - lp->segtype = (const struct segment_type *) - arg_ptr_value(cmd, type_ARG, - get_segtype_from_string(cmd, "striped")); + lp->segtype = get_segtype_from_string(cmd, arg_str_value(cmd, type_ARG, "striped")); if (arg_count(cmd, snapshot_ARG) || seg_is_snapshot(lp) || arg_count(cmd, virtualsize_ARG)) diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c index d9ea0c739..48635567a 100644 --- a/tools/lvmcmdline.c +++ b/tools/lvmcmdline.c @@ -51,7 +51,7 @@ extern char *optarg; * Table of valid switches */ static struct arg _the_args[ARG_COUNT + 1] = { -#define arg(a, b, c, d, e) {b, "", "--" c, d, e, 0, NULL, 0, 0, INT64_C(0), UINT64_C(0), SIGN_NONE, PERCENT_NONE, NULL}, +#define arg(a, b, c, d, e) {b, "", "--" c, d, e, 0, NULL, 0, 0, INT64_C(0), UINT64_C(0), SIGN_NONE, PERCENT_NONE}, #include "args.h" #undef arg }; @@ -100,10 +100,12 @@ uint64_t arg_uint64_value(struct cmd_context *cmd, int a, const uint64_t def) return arg_count(cmd, a) ? _the_args[a].ui64_value : def; } +/* No longer used. const void *arg_ptr_value(struct cmd_context *cmd, int a, const void *def) { return arg_count(cmd, a) ? _the_args[a].ptr : def; } +*/ sign_t arg_sign_value(struct cmd_context *cmd, int a, const sign_t def) { @@ -182,21 +184,7 @@ int yes_no_excl_arg(struct cmd_context *cmd __attribute((unused)), int metadatatype_arg(struct cmd_context *cmd, struct arg *a) { - struct format_type *fmt; - char *format; - - format = a->value; - - dm_list_iterate_items(fmt, &cmd->formats) { - if (!strcasecmp(fmt->name, format) || - !strcasecmp(fmt->name + 3, format) || - (fmt->alias && !strcasecmp(fmt->alias, format))) { - a->ptr = fmt; - return 1; - } - } - - return 0; + return get_format_by_name(cmd, a->value) ? 1 : 0; } static int _get_int_arg(struct arg *a, char **ptr) @@ -458,10 +446,7 @@ int alloc_arg(struct cmd_context *cmd __attribute((unused)), struct arg *a) int segtype_arg(struct cmd_context *cmd, struct arg *a) { - if (!(a->ptr = (void *) get_segtype_from_string(cmd, a->value))) - return 0; - - return 1; + return get_segtype_from_string(cmd, a->value) ? 1 : 0; } /* @@ -912,8 +897,9 @@ static void _apply_settings(struct cmd_context *cmd) set_activation(cmd->current_settings.activation); - cmd->fmt = arg_ptr_value(cmd, metadatatype_ARG, - cmd->current_settings.fmt); + cmd->fmt = get_format_by_name(cmd, arg_str_value(cmd, metadatatype_ARG, + cmd->current_settings.fmt_name)); + cmd->handles_missing_pvs = 0; } diff --git a/tools/lvresize.c b/tools/lvresize.c index 030227e4e..1fa5aa82c 100644 --- a/tools/lvresize.c +++ b/tools/lvresize.c @@ -420,7 +420,8 @@ static int _lvresize(struct cmd_context *cmd, struct volume_group *vg, } /* FIXME Support LVs with mixed segment types */ - if (lp->segtype != arg_ptr_value(cmd, type_ARG, lp->segtype)) { + if (lp->segtype != get_segtype_from_string(cmd, arg_str_value(cmd, type_ARG, + lp->segtype->name))) { log_error("VolumeType does not match (%s)", lp->segtype->name); return EINVALID_CMD_LINE; } diff --git a/tools/tools.h b/tools/tools.h index 75575e7bb..f379b03d1 100644 --- a/tools/tools.h +++ b/tools/tools.h @@ -114,7 +114,7 @@ struct arg { uint64_t ui64_value; sign_t sign; percent_t percent; - void *ptr; +/* void *ptr; // Currently not used. */ }; #define CACHE_VGMETADATA 0x00000001 -- 2.43.5