From 1c7d6584a7811b7785ae5c1e378f14b5ba0971cf Mon Sep 17 00:00:00 2001 From: takeshi_hoshina Date: Mon, 2 Nov 2020 11:07:33 +0900 Subject: basesystem-jj recipes --- ...ds-from-kernel-cmdline-mpath.wwids-with-A.patch | 190 +++++++-------------- 1 file changed, 61 insertions(+), 129 deletions(-) (limited to 'external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch') diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch index ddf022f7..5fd6d668 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch @@ -1,7 +1,13 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Fri, 17 Oct 2014 11:20:34 -0500 -Subject: [PATCH] RH: add wwids from kernel cmdline mpath.wwids with -A +From 0f54b3120ca06ff3168cdbf901a27b68c4638398 Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Thu, 26 Sep 2019 16:29:48 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep +17 + 00:00:00 2001 From: Benjamin Marzinski Date: Fri, +17 + Oct 2014 11:20:34 -0500 Subject: [PATCH] RH: add wwids from kernel +cmdline + mpath.wwids with -A This patch adds another option to multipath, "-A", which reads /proc/cmdline for mpath.wwid= options, and adds any wwids it finds @@ -13,68 +19,71 @@ patch also execs "/sbin/multipath -A" before running multipathd in multipathd.service Signed-off-by: Benjamin Marzinski + +Upstream-Status: Pending + +Update this patch to new version 0.8.2 + +Signed-off-by: Changqing Li --- - libmultipath/wwids.c | 44 +++++++++++++++++++++++++++++++++++++++++++ - libmultipath/wwids.h | 1 + - multipath/main.c | 10 ++++++++-- - multipath/multipath.8 | 5 ++++- - multipathd/multipathd.service | 1 + - 5 files changed, 58 insertions(+), 3 deletions(-) + libmultipath/wwids.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ + libmultipath/wwids.h | 1 + + 2 files changed, 45 insertions(+) diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c -index 53e7951..39e08cd 100644 +index 28a2150d..a0bfa851 100644 --- a/libmultipath/wwids.c +++ b/libmultipath/wwids.c -@@ -443,3 +443,47 @@ int op ## _wwid(const char *wwid) \ +@@ -454,3 +454,47 @@ int op ## _wwid(const char *wwid) \ declare_failed_wwid_op(is_failed, false) declare_failed_wwid_op(mark_failed, true) declare_failed_wwid_op(unmark_failed, true) + +int remember_cmdline_wwid(void) +{ -+ FILE *f = NULL; -+ char buf[LINE_MAX], *next, *ptr; -+ int ret = 0; ++ FILE *f = NULL; ++ char buf[LINE_MAX], *next, *ptr; ++ int ret = 0; + -+ f = fopen("/proc/cmdline", "re"); -+ if (!f) { -+ condlog(0, "can't open /proc/cmdline : %s", strerror(errno)); -+ return -1; -+ } ++ f = fopen("/proc/cmdline", "re"); ++ if (!f) { ++ condlog(0, "can't open /proc/cmdline : %s", strerror(errno)); ++ return -1; ++ } + -+ if (!fgets(buf, sizeof(buf), f)) { -+ if (ferror(f)) -+ condlog(0, "read of /proc/cmdline failed : %s", -+ strerror(errno)); -+ else -+ condlog(0, "couldn't read /proc/cmdline"); -+ fclose(f); -+ return -1; -+ } -+ fclose(f); -+ next = buf; -+ while((ptr = strstr(next, "mpath.wwid="))) { -+ ptr += 11; -+ next = strpbrk(ptr, " \t\n"); -+ if (next) { -+ *next = '\0'; -+ next++; -+ } -+ if (strlen(ptr)) { -+ if (remember_wwid(ptr) != 0) -+ ret = -1; -+ } -+ else { -+ condlog(0, "empty mpath.wwid kernel command line option"); -+ ret = -1; -+ } -+ if (!next) -+ break; -+ } -+ return ret; ++ if (!fgets(buf, sizeof(buf), f)) { ++ if (ferror(f)) ++ condlog(0, "read of /proc/cmdline failed : %s", ++ strerror(errno)); ++ else ++ condlog(0, "couldn't read /proc/cmdline"); ++ fclose(f); ++ return -1; ++ } ++ fclose(f); ++ next = buf; ++ while((ptr = strstr(next, "mpath.wwid="))) { ++ ptr += 11; ++ next = strpbrk(ptr, " \t\n"); ++ if (next) { ++ *next = '\0'; ++ next++; ++ } ++ if (strlen(ptr)) { ++ if (remember_wwid(ptr) != 0) ++ ret = -1; ++ } ++ else { ++ condlog(0, "empty mpath.wwid kernel command line option"); ++ ret = -1; ++ } ++ if (!next) ++ break; ++ } ++ return ret; +} diff --git a/libmultipath/wwids.h b/libmultipath/wwids.h -index 0c6ee54..e32a0b0 100644 +index 0c6ee54d..e32a0b0e 100644 --- a/libmultipath/wwids.h +++ b/libmultipath/wwids.h @@ -17,6 +17,7 @@ int remember_wwid(char *wwid); @@ -85,83 +94,6 @@ index 0c6ee54..e32a0b0 100644 enum { WWID_IS_NOT_FAILED = 0, -diff --git a/multipath/main.c b/multipath/main.c -index 6fdde03..7bac232 100644 ---- a/multipath/main.c -+++ b/multipath/main.c -@@ -109,7 +109,7 @@ usage (char * progname) - { - fprintf (stderr, VERSION_STRING); - fprintf (stderr, "Usage:\n"); -- fprintf (stderr, " %s [-a|-c|-w|-W] [-d] [-r] [-i] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname); -+ fprintf (stderr, " %s [-a|-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); -@@ -123,6 +123,8 @@ usage (char * progname) - " -f flush a multipath device map\n" - " -F flush all multipath device maps\n" - " -a add a device wwid to the wwids file\n" -+ " -A add devices from kernel command line mpath.wwids\n" -+ " parameters to wwids file\n" - " -c check if a device should be a path in a multipath device\n" - " -C check if a multipath device has usable paths\n" - " -q allow queue_if_no_path when multipathd is not running\n" -@@ -907,7 +909,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, ":aAdcChl::FfM:v:p:b:BrR:itquUwW")) != EOF ) { - switch(arg) { - case 1: printf("optarg : %s\n",optarg); - break; -@@ -974,6 +976,10 @@ main (int argc, char *argv[]) - case 't': - r = dump_config(conf); - goto out_free_config; -+ case 'A': -+ if (remember_cmdline_wwid() != 0) -+ exit(1); -+ exit(0); - case 'h': - usage(argv[0]); - exit(0); -diff --git a/multipath/multipath.8 b/multipath/multipath.8 -index 914a8cb..8c6a4c1 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 | \-F | \-B | \-c | \-C | \-q | \-r | \-i | \-a | \-A | \-u | \-U | \-w | \-W \|] - .RB [\| \-p\ \c - .IR failover | multibus | group_by_serial | group_by_prio | group_by_node_name \|] - .RB [\| \-R\ \c -@@ -135,6 +135,9 @@ Add the WWID for the specified device to the WWIDs file. - Check if the device specified in the program environment should be - a path in a multipath device. - . -+.B \-A -+add wwids from any kernel command line mpath.wwid parameters to the wwids file -+. - .TP - .B \-U - Check if the device specified in the program environment is a multipath device -diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service -index 17434ce..0fbcc46 100644 ---- a/multipathd/multipathd.service -+++ b/multipathd/multipathd.service -@@ -15,6 +15,7 @@ Type=notify - NotifyAccess=main - LimitCORE=infinity - ExecStartPre=-/sbin/modprobe -a scsi_dh_alua scsi_dh_emc scsi_dh_rdac dm-multipath -+ExecStartPre=-/sbin/multipath -A - ExecStart=/sbin/multipathd -d -s - ExecReload=/sbin/multipathd reconfigure - TasksMax=infinity -- -2.7.4 +2.17.1 -- cgit 1.2.3-korg