<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>