[dm-devel] [PATCH] mpathpersistent: segment faulty occured in mpath_persistent_reserve_in()

tang.junhui at zte.com.cn tang.junhui at zte.com.cn
Tue Nov 1 03:33:22 UTC 2016


Hello Hannes,

Since this issue is introduced by RCU, can you have a review for this 
patch?

Thanks,
Tang





发件人:         tang.wenji at zte.com.cn
收件人:         christophe varoqui <christophe.varoqui at free.fr>, 
抄送:   zhang.kai16 at zte.com.cn, dm-devel at redhat.com, 
tang.junhui at zte.com.cn, tang.wenji at zte.com.cn
日期:   2016/10/27 17:08
主题:   [dm-devel] [PATCH] mpathpersistent: segment faulty occured in 
mpath_persistent_reserve_in()
发件人: dm-devel-bounces at redhat.com



From: 10111224 <tang.wenji at zte.com.cn>

Segment faulty occured when executing "mpathpersist -i -k
/dev/mapper/mpath1" command.The reason is that an uninitialized global 
variable conf is used in mpath_persistent_reserve_in(). The same problem 
also exists in
mpath_persistent_reserve_out().

Signed-off-by: tang.wenji <tang.wenji at zte.com.cn>
---
 libmpathpersist/mpath_persist.c | 21 +++++++++++++++++++--
 libmpathpersist/mpathpr.h       |  4 ----
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/libmpathpersist/mpath_persist.c 
b/libmpathpersist/mpath_persist.c
index 7501651..582d4ef 100644
--- a/libmpathpersist/mpath_persist.c
+++ b/libmpathpersist/mpath_persist.c
@@ -78,6 +78,7 @@ updatepaths (struct multipath * mpp)
                 int i, j;
                 struct pathgroup * pgp;
                 struct path * pp;
+                struct config *conf;
 
                 if (!mpp->pg)
                                 return 0;
@@ -97,16 +98,24 @@ updatepaths (struct multipath * mpp)
  continue;
                                                                 }
                                                                 pp->mpp = 
mpp;
+                                                                conf = 
get_multipath_config();
 pathinfo(pp, conf, DI_ALL);
+ put_multipath_config(conf);
                                                                 continue;
                                                 }
                                                 pp->mpp = mpp;
                                                 if (pp->state == 
PATH_UNCHECKED ||
-  pp->state == PATH_WILD)
+  pp->state == PATH_WILD){
+                                                                conf = 
get_multipath_config();
 pathinfo(pp, conf, DI_CHECKER);
+ put_multipath_config(conf);
+                                                }
 
-                                                if (pp->priority == 
PRIO_UNDEF)
+                                                if (pp->priority == 
PRIO_UNDEF){
+                                                                conf = 
get_multipath_config();
 pathinfo(pp, conf, DI_PRIO);
+ put_multipath_config(conf);
+                                                }
                                 }
                 }
                 return 0;
@@ -159,8 +168,11 @@ int mpath_persistent_reserve_in (int fd, int 
rq_servact,
                 int map_present;
                 int major, minor;
                 int ret;
+                struct config *conf;
 
+                conf = get_multipath_config();
                 conf->verbosity = verbose;
+                put_multipath_config( conf);
 
                 if (fstat( fd, &info) != 0){
                                 condlog(0, "stat error %d", fd);
@@ -252,8 +264,11 @@ int mpath_persistent_reserve_out ( int fd, int 
rq_servact, int rq_scope,
                 int j;
                 unsigned char *keyp;
                 uint64_t prkey;
+                struct config *conf;
 
+                conf = get_multipath_config();
                 conf->verbosity = verbose;
+                put_multipath_config(conf);
 
                 if (fstat( fd, &info) != 0){
                                 condlog(0, "stat error fd=%d", fd);
@@ -320,7 +335,9 @@ int mpath_persistent_reserve_out ( int fd, int 
rq_servact, int rq_scope,
                                 goto out1;
                 }
 
+                conf = get_multipath_config();
                 select_reservation_key(conf, mpp);
+                put_multipath_config(conf);
 
                 switch(rq_servact)
                 {
diff --git a/libmpathpersist/mpathpr.h b/libmpathpersist/mpathpr.h
index cd58201..e6c2ded 100644
--- a/libmpathpersist/mpathpr.h
+++ b/libmpathpersist/mpathpr.h
@@ -25,10 +25,6 @@ struct threadinfo {
                 struct prout_param param;
 };
 
-
-struct config * conf;
-
-
 int prin_do_scsi_ioctl(char * dev, int rq_servact, struct prin_resp * 
resp, int noisy);
 int prout_do_scsi_ioctl( char * dev, int rq_servact, int rq_scope,
                                 unsigned int rq_type, struct 
prout_param_descriptor *paramp, int noisy);
-- 
2.8.1.windows.1

--
dm-devel mailing list
dm-devel at redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20161101/0eadd189/attachment.htm>


More information about the dm-devel mailing list