代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/multipath-tools 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c
index 27c848c..1e6a172 100644
--- a/libmpathpersist/mpath_persist.c
+++ b/libmpathpersist/mpath_persist.c
@@ -199,6 +199,11 @@ int mpath_persistent_reserve_in (int fd, int rq_servact,
if (map_present && !dm_is_mpath(alias)){
condlog( 0, "%s: not a multipath device.", alias);
ret = MPATH_PR_DMMP_ERROR;
+ if (curmp)
+ vector_free(curmp);
+ if (pathvec)
+ vector_free(pathvec);
+
goto out;
}
@@ -297,6 +302,10 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope,
if (map_present && !dm_is_mpath(alias)){
condlog(3, "%s: not a multipath device.", alias);
ret = MPATH_PR_DMMP_ERROR;
+ if (curmp)
+ vector_free(curmp);
+ if (pathvec)
+ vector_free(pathvec);
goto out;
}
@@ -321,7 +330,7 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope,
goto out1;
}
- /* get info of all paths from the dm device */
+ /* get info of all paths from the dm device */
if (get_mpvec(curmp, pathvec, alias)){
condlog(0, "%s: failed to get device info.", alias);
ret = MPATH_PR_DMMP_ERROR;
@@ -882,7 +891,7 @@ out:
return (status);
}
-void * mpath_alloc_prin_response(int prin_sa)
+void *mpath_alloc_prin_response(int prin_sa)
{
void * ptr = NULL;
int size=0;
@@ -905,6 +914,10 @@ void * mpath_alloc_prin_response(int prin_sa)
if (size > 0)
{
ptr = calloc(size, 1);
+ if (!ptr) {
+ condlog (0, "failed to allocate MPATH_PRIN_RFSTAT_SA buffer");
+ return NULL;
+ }
}
return ptr;
}
diff --git a/libmpathpersist/mpath_pr_ioctl.c b/libmpathpersist/mpath_pr_ioctl.c
index 6dd7403..b317b4e 100644
--- a/libmpathpersist/mpath_pr_ioctl.c
+++ b/libmpathpersist/mpath_pr_ioctl.c
@@ -25,8 +25,8 @@
int prin_do_scsi_ioctl(char * dev, int rq_servact, struct prin_resp *resp, int noisy);
void mpath_format_readkeys(struct prin_resp *pr_buff, int len , int noisy);
void mpath_format_readfullstatus(struct prin_resp *pr_buff, int len, int noisy);
-int mpath_translate_response (char * dev, struct sg_io_hdr io_hdr,
- SenseData_t *Sensedata, int noisy);
+int mpath_translate_response (const char *dev, struct sg_io_hdr *io_hdr,
+ const SenseData_t *Sensedata, int noisy);
void dumpHex(const char* str, int len, int no_ascii);
int prout_do_scsi_ioctl( char * dev, int rq_servact, int rq_scope,
unsigned int rq_type, struct prout_param_descriptor *paramp, int noisy);
@@ -115,7 +115,7 @@ retry :
condlog(4, "%s: Duration=%u (ms)", dev, io_hdr.duration);
- status = mpath_translate_response(dev, io_hdr, &Sensedata, noisy);
+ status = mpath_translate_response(dev, &io_hdr, &Sensedata, noisy);
condlog(3, "%s: status = %d", dev, status);
if (status == MPATH_PR_SENSE_UNIT_ATTENTION && (retry > 0))
@@ -354,7 +354,7 @@ retry :
condlog(3, "%s: duration = %u (ms)", dev, io_hdr.duration);
condlog(4, "%s: persistent reservation in: requested %d bytes but got %d bytes)", dev, mx_resp_len, got);
- status = mpath_translate_response(dev, io_hdr, &Sensedata, noisy);
+ status = mpath_translate_response(dev, &io_hdr, &Sensedata, noisy);
if (status == MPATH_PR_SENSE_UNIT_ATTENTION && (retry > 0))
{
@@ -399,18 +399,18 @@ out:
return status;
}
-int mpath_translate_response (char * dev, struct sg_io_hdr io_hdr,
- SenseData_t *Sensedata, int noisy)
+int mpath_translate_response (const char *dev, struct sg_io_hdr *io_hdr,
+ const SenseData_t *Sensedata, int noisy)
{
condlog(3, "%s: status driver:%02x host:%02x scsi:%02x", dev,
- io_hdr.driver_status, io_hdr.host_status ,io_hdr.status);
- io_hdr.status &= 0x7e;
- if ((0 == io_hdr.status) &&
- (0 == io_hdr.host_status) &&
- (0 == io_hdr.driver_status))
+ io_hdr->driver_status, io_hdr->host_status ,io_hdr->status);
+ io_hdr->status &= 0x7e;
+ if ((0 == io_hdr->status) &&
+ (0 == io_hdr->host_status) &&
+ (0 == io_hdr->driver_status))
return MPATH_PR_SUCCESS;
- switch(io_hdr.status) {
+ switch(io_hdr->status) {
case SAM_STAT_GOOD:
break;
case SAM_STAT_CHECK_CONDITION:
@@ -450,13 +450,13 @@ int mpath_translate_response (char * dev, struct sg_io_hdr io_hdr,
return MPATH_PR_OTHER;
}
- switch(io_hdr.host_status) {
+ switch(io_hdr->host_status) {
case DID_OK :
break;
default :
return MPATH_PR_OTHER;
}
- switch(io_hdr.driver_status)
+ switch(io_hdr->driver_status)
{
case DRIVER_OK:
break;
diff --git a/mpathpersist/main.c b/mpathpersist/main.c
index 0e4d3f2..4db07b2 100644
--- a/mpathpersist/main.c
+++ b/mpathpersist/main.c
@@ -61,7 +61,7 @@ struct udev *udev;
int main (int argc, char * argv[])
{
- int fd, c, res;
+ int c, res, fd = -1;
const char *device_name = NULL;
int num_prin_sa = 0;
int num_prout_sa = 0;
@@ -488,6 +488,7 @@ int main (int argc, char * argv[])
}
res = close (fd);
+ fd = -1;
if (res < 0)
{
mpath_lib_exit(conf);
@@ -496,6 +497,8 @@ int main (int argc, char * argv[])
}
out :
+ if (fd >= 0)
+ close(fd);
mpath_lib_exit(conf);
udev_unref(udev);
return (ret >= 0) ? ret : MPATH_PR_OTHER;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。