All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] mpathpersistent: segment faulty occured in mpath_persistent_reserve_in()
@ 2016-11-07  6:35 tang.wenji
  2016-11-20  9:13 ` Christophe Varoqui
  0 siblings, 1 reply; 6+ messages in thread
From: tang.wenji @ 2016-11-07  6:35 UTC (permalink / raw)
  To: Christophe Varoqui; +Cc: zhang.kai16, dm-devel, tang.wenji

From: "tang.wenji" <tang.wenji@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@zte.com.cn>
---
 libmpathpersist/mpath_persist.c | 22 +++++++++++++++++++---
 libmpathpersist/mpathpr.h       |  4 ----
 2 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c
index faea2b7..982c795 100644
--- a/libmpathpersist/mpath_persist.c
+++ b/libmpathpersist/mpath_persist.c
@@ -35,7 +35,6 @@
 #define __STDC_FORMAT_MACROS 1
 
 struct udev *udev;
-struct config *conf;
 
 struct config *
 mpath_lib_init (struct udev *udev)
@@ -79,6 +78,7 @@ updatepaths (struct multipath * mpp)
 	int i, j;
 	struct pathgroup * pgp;
 	struct path * pp;
+	struct config *conf;
 
 	if (!mpp->pg)
 		return 0;
@@ -98,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;
@@ -160,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);
@@ -253,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);
@@ -321,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 056c547..e6c2ded 100644
--- a/libmpathpersist/mpathpr.h
+++ b/libmpathpersist/mpathpr.h
@@ -25,10 +25,6 @@ struct threadinfo {
 	struct prout_param param;
 };
 
-
-extern 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

^ permalink raw reply related	[flat|nested] 6+ messages in thread
* [PATCH] mpathpersistent: segment faulty occured in mpath_persistent_reserve_in()
@ 2016-10-27  8:55 tang.wenji
  2016-11-01  3:33 ` tang.junhui
  2016-11-04 16:23 ` Benjamin Marzinski
  0 siblings, 2 replies; 6+ messages in thread
From: tang.wenji @ 2016-10-27  8:55 UTC (permalink / raw)
  To: christophe varoqui; +Cc: zhang.kai16, dm-devel, tang.junhui, tang.wenji

From: 10111224 <tang.wenji@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@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

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-11-20  9:13 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-07  6:35 [PATCH] mpathpersistent: segment faulty occured in mpath_persistent_reserve_in() tang.wenji
2016-11-20  9:13 ` Christophe Varoqui
  -- strict thread matches above, loose matches on Subject: below --
2016-10-27  8:55 tang.wenji
2016-11-01  3:33 ` tang.junhui
2016-11-04 16:23 ` Benjamin Marzinski
2016-11-04 16:35   ` Christophe Varoqui

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.