Since this issue is introduced by RCU, can you have a review for this patch?
Thanks,
Tang
发件人: tang.wenji@xxxxxxxxxx
收件人: christophe varoqui <christophe.varoqui@xxxxxxx>,
抄送: zhang.kai16@xxxxxxxxxx, dm-devel@xxxxxxxxxx, tang.junhui@xxxxxxxxxx, tang.wenji@xxxxxxxxxx
日期: 2016/10/27 17:08
主题: [dm-devel] [PATCH] mpathpersistent: segment faulty occured in mpath_persistent_reserve_in()
发件人: dm-devel-bounces@xxxxxxxxxx
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