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, ) != 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()
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()
From: 10111224Segment 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