<div dir="ltr">Applied,<div>thanks.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 7, 2016 at 7:35 AM, <span dir="ltr"><<a href="mailto:tang.wenji@zte.com.cn" target="_blank">tang.wenji@zte.com.cn</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: "tang.wenji" <<a href="mailto:tang.wenji@zte.com.cn">tang.wenji@zte.com.cn</a>><br>
<br>
Segment faulty occured when executing "mpathpersist -i -k<br>
/dev/mapper/mpath1" command.The reason is that an uninitialized global<br>
variable conf is used in mpath_persistent_reserve_in(). The same<br>
problem also exists in mpath_persistent_reserve_out()<wbr>.<br>
<br>
Signed-off-by: tang.wenji <<a href="mailto:tang.wenji@zte.com.cn">tang.wenji@zte.com.cn</a>><br>
---<br>
libmpathpersist/mpath_persist.<wbr>c | 22 +++++++++++++++++++---<br>
libmpathpersist/mpathpr.h | 4 ----<br>
2 files changed, 19 insertions(+), 7 deletions(-)<br>
<br>
diff --git a/libmpathpersist/mpath_<wbr>persist.c b/libmpathpersist/mpath_<wbr>persist.c<br>
index faea2b7..982c795 100644<br>
--- a/libmpathpersist/mpath_<wbr>persist.c<br>
+++ b/libmpathpersist/mpath_<wbr>persist.c<br>
@@ -35,7 +35,6 @@<br>
#define __STDC_FORMAT_MACROS 1<br>
<br>
struct udev *udev;<br>
-struct config *conf;<br>
<br>
struct config *<br>
mpath_lib_init (struct udev *udev)<br>
@@ -79,6 +78,7 @@ updatepaths (struct multipath * mpp)<br>
int i, j;<br>
struct pathgroup * pgp;<br>
struct path * pp;<br>
+ struct config *conf;<br>
<br>
if (!mpp->pg)<br>
return 0;<br>
@@ -98,16 +98,24 @@ updatepaths (struct multipath * mpp)<br>
continue;<br>
}<br>
pp->mpp = mpp;<br>
+ conf = get_multipath_config();<br>
pathinfo(pp, conf, DI_ALL);<br>
+ put_multipath_config(conf);<br>
continue;<br>
}<br>
pp->mpp = mpp;<br>
if (pp->state == PATH_UNCHECKED ||<br>
- pp->state == PATH_WILD)<br>
+ pp->state == PATH_WILD) {<br>
+ conf = get_multipath_config();<br>
pathinfo(pp, conf, DI_CHECKER);<br>
+ put_multipath_config(conf);<br>
+ }<br>
<br>
- if (pp->priority == PRIO_UNDEF)<br>
+ if (pp->priority == PRIO_UNDEF) {<br>
+ conf = get_multipath_config();<br>
pathinfo(pp, conf, DI_PRIO);<br>
+ put_multipath_config(conf);<br>
+ }<br>
}<br>
}<br>
return 0;<br>
@@ -160,8 +168,11 @@ int mpath_persistent_reserve_in (int fd, int rq_servact,<br>
int map_present;<br>
int major, minor;<br>
int ret;<br>
+ struct config *conf;<br>
<br>
+ conf = get_multipath_config();<br>
conf->verbosity = verbose;<br>
+ put_multipath_config(conf);<br>
<br>
if (fstat( fd, &info) != 0){<br>
condlog(0, "stat error %d", fd);<br>
@@ -253,8 +264,11 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope,<br>
int j;<br>
unsigned char *keyp;<br>
uint64_t prkey;<br>
+ struct config *conf;<br>
<br>
+ conf = get_multipath_config();<br>
conf->verbosity = verbose;<br>
+ put_multipath_config(conf);<br>
<br>
if (fstat( fd, &info) != 0){<br>
condlog(0, "stat error fd=%d", fd);<br>
@@ -321,7 +335,9 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope,<br>
goto out1;<br>
}<br>
<br>
+ conf = get_multipath_config();<br>
select_reservation_key(conf, mpp);<br>
+ put_multipath_config(conf);<br>
<br>
switch(rq_servact)<br>
{<br>
diff --git a/libmpathpersist/mpathpr.h b/libmpathpersist/mpathpr.h<br>
index 056c547..e6c2ded 100644<br>
--- a/libmpathpersist/mpathpr.h<br>
+++ b/libmpathpersist/mpathpr.h<br>
@@ -25,10 +25,6 @@ struct threadinfo {<br>
struct prout_param param;<br>
};<br>
<br>
-<br>
-extern struct config *conf;<br>
-<br>
-<br>
int prin_do_scsi_ioctl(char * dev, int rq_servact, struct prin_resp * resp, int noisy);<br>
int prout_do_scsi_ioctl( char * dev, int rq_servact, int rq_scope,<br>
unsigned int rq_type, struct prout_param_descriptor *paramp, int noisy);<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.8.1.windows.1<br>
<br>
<br>
</font></span></blockquote></div><br></div>