[dm-devel] [PATCH 24/28] multipath: implement "multipath -T"
Martin Wilck
mwilck at suse.com
Fri Jun 8 10:20:37 UTC 2018
This does the same as "multipathd show config local", and is
provided for convenience.
Signed-off-by: Martin Wilck <mwilck at suse.com>
---
libmultipath/config.h | 1 +
multipath/main.c | 43 +++++++++++++++++++++++++++----------------
multipath/multipath.8 | 8 +++++++-
3 files changed, 35 insertions(+), 17 deletions(-)
diff --git a/libmultipath/config.h b/libmultipath/config.h
index e1cbd59b..e2fa1852 100644
--- a/libmultipath/config.h
+++ b/libmultipath/config.h
@@ -37,6 +37,7 @@ enum mpath_cmds {
CMD_RESET_WWIDS,
CMD_ADD_WWID,
CMD_USABLE_PATHS,
+ CMD_DUMP_CONFIG,
};
enum force_reload_types {
diff --git a/multipath/main.c b/multipath/main.c
index 54a98026..ed4f40ef 100644
--- a/multipath/main.c
+++ b/multipath/main.c
@@ -80,6 +80,19 @@ void put_multipath_config(void *arg)
/* Noop for now */
}
+static int
+dump_config (struct config *conf, vector hwes, vector mpvec)
+{
+ char * reply = snprint_config(conf, NULL, hwes, mpvec);
+
+ if (reply != NULL) {
+ printf("%s", reply);
+ FREE(reply);
+ return 0;
+ } else
+ return 1;
+}
+
void rcu_register_thread_memb(void) {}
void rcu_unregister_thread_memb(void) {}
@@ -112,7 +125,7 @@ usage (char * progname)
fprintf (stderr, " %s [-a|-c|-w|-W] [-d] [-r] [-i] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname);
fprintf (stderr, " %s -l|-ll|-f [-v lvl] [-b fil] [-R num] [dev]\n", progname);
fprintf (stderr, " %s -F [-v lvl] [-R num]\n", progname);
- fprintf (stderr, " %s -t\n", progname);
+ fprintf (stderr, " %s [-t|-T]\n", progname);
fprintf (stderr, " %s -h\n", progname);
fprintf (stderr,
"\n"
@@ -128,6 +141,7 @@ usage (char * progname)
" -q allow queue_if_no_path when multipathd is not running\n"
" -d dry run, do not create or update devmaps\n"
" -t display the currently used multipathd configuration\n"
+ " -T display the multipathd configuration without builtin defaults\n"
" -r force devmap reload\n"
" -i ignore wwids file\n"
" -B treat the bindings file as read only\n"
@@ -671,6 +685,13 @@ configure (struct config *conf, enum mpath_cmds cmd,
filter_pathvec(pathvec, refwwid);
+ if (cmd == CMD_DUMP_CONFIG) {
+ vector hwes = get_used_hwes(pathvec);
+
+ dump_config(conf, hwes, curmp);
+ vector_free(hwes);
+ goto out;
+ }
if (cmd == CMD_VALID_PATH) {
struct path *pp;
@@ -750,19 +771,6 @@ out:
return r;
}
-static int
-dump_config (struct config *conf)
-{
- char * reply = snprint_config(conf, NULL, NULL, NULL);
-
- if (reply != NULL) {
- printf("%s", reply);
- FREE(reply);
- return 0;
- } else
- return 1;
-}
-
static int
get_dev_type(char *dev) {
struct stat buf;
@@ -858,7 +866,7 @@ main (int argc, char *argv[])
exit(1);
multipath_conf = conf;
conf->retrigger_tries = 0;
- while ((arg = getopt(argc, argv, ":adcChl::FfM:v:p:b:BrR:itquUwW")) != EOF ) {
+ while ((arg = getopt(argc, argv, ":adcChl::FfM:v:p:b:BrR:itTquUwW")) != EOF ) {
switch(arg) {
case 1: printf("optarg : %s\n",optarg);
break;
@@ -923,8 +931,11 @@ main (int argc, char *argv[])
conf->find_multipaths |= _FIND_MULTIPATHS_I;
break;
case 't':
- r = dump_config(conf);
+ r = dump_config(conf, NULL, NULL);
goto out_free_config;
+ case 'T':
+ cmd = CMD_DUMP_CONFIG;
+ break;
case 'h':
usage(argv[0]);
exit(0);
diff --git a/multipath/multipath.8 b/multipath/multipath.8
index 914a8cb2..b5e5292f 100644
--- a/multipath/multipath.8
+++ b/multipath/multipath.8
@@ -25,7 +25,7 @@ multipath \- Device mapper target autoconfig.
.RB [\| \-b\ \c
.IR bindings_file \|]
.RB [\| \-d \|]
-.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-C | \-q | \-r | \-i | \-a | \-u | \-U | \-w | \-W \|]
+.RB [\| \-h | \-l | \-ll | \-f | \-t | \-T | \-F | \-B | \-c | \-C | \-q | \-r | \-i | \-a | \-u | \-U | \-w | \-W \|]
.RB [\| \-p\ \c
.IR failover | multibus | group_by_serial | group_by_prio | group_by_node_name \|]
.RB [\| \-R\ \c
@@ -89,6 +89,12 @@ Flush all unused multipath device maps.
Display the currently used multipathd configuration.
.
.TP
+.B \-T
+Display the currently used multipathd configuration, limiting the output to
+those devices actually present in the system. This can be used a template for
+creating \fImultipath.conf\fR.
+.
+.TP
.B \-r
Force devmap reload.
.
--
2.17.0
More information about the dm-devel
mailing list