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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Tang,

would you rebase this patch over upstream master please ?

Bart's commit 6e89fd1ec49da86555558acd63f05a4b4152a5c8 already moved the conf pointer declaration.

Thanks,
Christophe.


On Fri, Nov 4, 2016 at 5:23 PM, Benjamin Marzinski <bmarzins@xxxxxxxxxx> wrote:
On Thu, Oct 27, 2016 at 04:55:28PM +0800, tang.wenji@xxxxxxxxxx wrote:

ACK

-Ben

> From: 10111224 <tang.wenji@xxxxxxxxxx>
>
> 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@xxxxxxxxxx>
> ---
>  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@xxxxxxxxxx
> https://www.redhat.com/mailman/listinfo/dm-devel

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

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

[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux