Re: [dm-devel] [PATCH] mpathpersistent: segment faulty occured in mpath_persistent_reserve_in()
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, &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 > > > -- 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()
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, &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 -- 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()
Tang, would you rebase this patch over upstream master please ? Bart's commit 6e89fd1ec49da8658acd63f05a4b4152a5c8 already moved the conf pointer declaration. Thanks, Christophe. On Fri, Nov 4, 2016 at 5:23 PM, Benjamin Marzinski wrote: > On Thu, Oct 27, 2016 at 04:55:28PM +0800, tang.we...@zte.com.cn wrote: > > ACK > > -Ben > > > 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, &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@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 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()
On Thu, Oct 27, 2016 at 04:55:28PM +0800, tang.we...@zte.com.cn wrote: ACK -Ben > 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, &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@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
Re: [dm-devel] [PATCH] mpathpersistent: segment faulty occured in mpath_persistent_reserve_in()
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 , 抄送: 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 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, &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@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()
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, &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@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel