1*4882a593SmuzhiyunFrom 0f54b3120ca06ff3168cdbf901a27b68c4638398 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Changqing Li <changqing.li@windriver.com> 3*4882a593SmuzhiyunDate: Thu, 26 Sep 2019 16:29:48 +0800 4*4882a593SmuzhiyunSubject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 5*4882a593Smuzhiyun17 6*4882a593Smuzhiyun 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Fri, 7*4882a593Smuzhiyun17 8*4882a593Smuzhiyun Oct 2014 11:20:34 -0500 Subject: [PATCH] RH: add wwids from kernel 9*4882a593Smuzhiyuncmdline 10*4882a593Smuzhiyun mpath.wwids with -A 11*4882a593Smuzhiyun 12*4882a593SmuzhiyunThis patch adds another option to multipath, "-A", which reads 13*4882a593Smuzhiyun/proc/cmdline for mpath.wwid=<WWID> options, and adds any wwids it finds 14*4882a593Smuzhiyunto /etc/multipath/wwids. While this isn't usually important during 15*4882a593Smuzhiyunnormal operation, since these wwids should already be added, it can be 16*4882a593Smuzhiyunhelpful during installation, to make sure that multipath can claim 17*4882a593Smuzhiyundevices as its own, before LVM or something else makes use of them. The 18*4882a593Smuzhiyunpatch also execs "/sbin/multipath -A" before running multipathd in 19*4882a593Smuzhiyunmultipathd.service 20*4882a593Smuzhiyun 21*4882a593SmuzhiyunSigned-off-by: Benjamin Marzinski <bmarzins@redhat.com> 22*4882a593Smuzhiyun 23*4882a593SmuzhiyunUpstream-Status: Pending 24*4882a593Smuzhiyun 25*4882a593SmuzhiyunUpdate this patch to new version 0.8.2 26*4882a593Smuzhiyun 27*4882a593SmuzhiyunSigned-off-by: Changqing Li <changqing.li@windriver.com> 28*4882a593Smuzhiyun--- 29*4882a593Smuzhiyun libmultipath/wwids.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 30*4882a593Smuzhiyun libmultipath/wwids.h | 1 + 31*4882a593Smuzhiyun 2 files changed, 45 insertions(+) 32*4882a593Smuzhiyun 33*4882a593Smuzhiyundiff --git a/libmultipath/wwids.c b/libmultipath/wwids.c 34*4882a593Smuzhiyunindex 28a2150d..a0bfa851 100644 35*4882a593Smuzhiyun--- a/libmultipath/wwids.c 36*4882a593Smuzhiyun+++ b/libmultipath/wwids.c 37*4882a593Smuzhiyun@@ -454,3 +454,47 @@ int op ## _wwid(const char *wwid) \ 38*4882a593Smuzhiyun declare_failed_wwid_op(is_failed, false) 39*4882a593Smuzhiyun declare_failed_wwid_op(mark_failed, true) 40*4882a593Smuzhiyun declare_failed_wwid_op(unmark_failed, true) 41*4882a593Smuzhiyun+ 42*4882a593Smuzhiyun+int remember_cmdline_wwid(void) 43*4882a593Smuzhiyun+{ 44*4882a593Smuzhiyun+ FILE *f = NULL; 45*4882a593Smuzhiyun+ char buf[LINE_MAX], *next, *ptr; 46*4882a593Smuzhiyun+ int ret = 0; 47*4882a593Smuzhiyun+ 48*4882a593Smuzhiyun+ f = fopen("/proc/cmdline", "re"); 49*4882a593Smuzhiyun+ if (!f) { 50*4882a593Smuzhiyun+ condlog(0, "can't open /proc/cmdline : %s", strerror(errno)); 51*4882a593Smuzhiyun+ return -1; 52*4882a593Smuzhiyun+ } 53*4882a593Smuzhiyun+ 54*4882a593Smuzhiyun+ if (!fgets(buf, sizeof(buf), f)) { 55*4882a593Smuzhiyun+ if (ferror(f)) 56*4882a593Smuzhiyun+ condlog(0, "read of /proc/cmdline failed : %s", 57*4882a593Smuzhiyun+ strerror(errno)); 58*4882a593Smuzhiyun+ else 59*4882a593Smuzhiyun+ condlog(0, "couldn't read /proc/cmdline"); 60*4882a593Smuzhiyun+ fclose(f); 61*4882a593Smuzhiyun+ return -1; 62*4882a593Smuzhiyun+ } 63*4882a593Smuzhiyun+ fclose(f); 64*4882a593Smuzhiyun+ next = buf; 65*4882a593Smuzhiyun+ while((ptr = strstr(next, "mpath.wwid="))) { 66*4882a593Smuzhiyun+ ptr += 11; 67*4882a593Smuzhiyun+ next = strpbrk(ptr, " \t\n"); 68*4882a593Smuzhiyun+ if (next) { 69*4882a593Smuzhiyun+ *next = '\0'; 70*4882a593Smuzhiyun+ next++; 71*4882a593Smuzhiyun+ } 72*4882a593Smuzhiyun+ if (strlen(ptr)) { 73*4882a593Smuzhiyun+ if (remember_wwid(ptr) != 0) 74*4882a593Smuzhiyun+ ret = -1; 75*4882a593Smuzhiyun+ } 76*4882a593Smuzhiyun+ else { 77*4882a593Smuzhiyun+ condlog(0, "empty mpath.wwid kernel command line option"); 78*4882a593Smuzhiyun+ ret = -1; 79*4882a593Smuzhiyun+ } 80*4882a593Smuzhiyun+ if (!next) 81*4882a593Smuzhiyun+ break; 82*4882a593Smuzhiyun+ } 83*4882a593Smuzhiyun+ return ret; 84*4882a593Smuzhiyun+} 85*4882a593Smuzhiyundiff --git a/libmultipath/wwids.h b/libmultipath/wwids.h 86*4882a593Smuzhiyunindex 0c6ee54d..e32a0b0e 100644 87*4882a593Smuzhiyun--- a/libmultipath/wwids.h 88*4882a593Smuzhiyun+++ b/libmultipath/wwids.h 89*4882a593Smuzhiyun@@ -17,6 +17,7 @@ int remember_wwid(char *wwid); 90*4882a593Smuzhiyun int check_wwids_file(char *wwid, int write_wwid); 91*4882a593Smuzhiyun int remove_wwid(char *wwid); 92*4882a593Smuzhiyun int replace_wwids(vector mp); 93*4882a593Smuzhiyun+int remember_cmdline_wwid(void); 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun enum { 96*4882a593Smuzhiyun WWID_IS_NOT_FAILED = 0, 97*4882a593Smuzhiyun-- 98*4882a593Smuzhiyun2.17.1 99*4882a593Smuzhiyun 100