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

2016-11-20 Thread Christophe Varoqui
Applied,
thanks.

On Mon, Nov 7, 2016 at 7:35 AM,  wrote:

> From: "tang.wenji" 
>
> 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 
> ---
>  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, ) != 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, ) != 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
>
>
>
--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

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

2016-10-31 Thread tang . junhui
Hello Hannes,

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

Thanks,
Tang





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



From: 10111224 <tang.we...@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.we...@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, ) != 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, ) != 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@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel


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

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

2016-10-27 Thread tang . wenji
From: 10111224 

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 
---
 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, ) != 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, ) != 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@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel