Applied, thanks. On Mon, Nov 7, 2016 at 7:35 AM, <tang.we...@zte.com.cn> wrote:
> From: "tang.wenji" <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 | 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