加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0008-fix-bugs-backported-from-next-branch.patch 4.72 KB
一键复制 编辑 原始数据 按行查看 历史
lixiaokeng 提交于 2021-11-23 21:49 . upgrade to 0.8.7
From daa16263754c3fc439f16c89608436f00150e1cb Mon Sep 17 00:00:00 2001
From: sunguoshuai <sunguoshuai@huawei.com>
Date: Wed, 23 Jan 2019 01:57:33 -0500
Subject: [PATCH 08/15] fix bugs backported from next branch
reason:fix bugs backported from next branch
---
libmultipath/prioritizers/alua.c | 4 ++++
libmultipath/prioritizers/emc.c | 2 +-
libmultipath/prioritizers/hds.c | 20 ++++++++++++--------
libmultipath/structs_vec.c | 4 +++-
multipathd/main.c | 5 +++++
5 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/libmultipath/prioritizers/alua.c b/libmultipath/prioritizers/alua.c
index 0ab06e2..a6307d6 100644
--- a/libmultipath/prioritizers/alua.c
+++ b/libmultipath/prioritizers/alua.c
@@ -131,15 +131,19 @@ int getprio (struct path * pp, char * args, unsigned int timeout)
switch(-rc) {
case ALUA_PRIO_NOT_SUPPORTED:
condlog(0, "%s: alua not supported", pp->dev);
+ rc = 0;
break;
case ALUA_PRIO_RTPG_FAILED:
condlog(0, "%s: couldn't get target port group", pp->dev);
+ rc = 0;
break;
case ALUA_PRIO_GETAAS_FAILED:
condlog(0, "%s: couldn't get asymmetric access state", pp->dev);
+ rc = 0;
break;
case ALUA_PRIO_TPGS_FAILED:
condlog(3, "%s: couldn't get supported alua states", pp->dev);
+ rc = 0;
break;
}
}
diff --git a/libmultipath/prioritizers/emc.c b/libmultipath/prioritizers/emc.c
index 3b63cca..c40f88a 100644
--- a/libmultipath/prioritizers/emc.c
+++ b/libmultipath/prioritizers/emc.c
@@ -19,7 +19,7 @@ int emc_clariion_prio(const char *dev, int fd, unsigned int timeout)
unsigned char inqCmdBlk[INQUIRY_CMDLEN] = {INQUIRY_CMD, 1, 0xC0, 0,
sizeof(sense_buffer), 0};
struct sg_io_hdr io_hdr;
- int ret = PRIO_UNDEF;
+ int ret = 0;
memset(&io_hdr, 0, sizeof (struct sg_io_hdr));
memset(&sense_buffer, 0, 128);
diff --git a/libmultipath/prioritizers/hds.c b/libmultipath/prioritizers/hds.c
index 88cac5f..45e1108 100644
--- a/libmultipath/prioritizers/hds.c
+++ b/libmultipath/prioritizers/hds.c
@@ -98,10 +98,12 @@ int hds_modular_prio (const char *dev, int fd, unsigned int timeout)
unsigned char *inqBuffp = inqBuff;
unsigned char sense_buffer[32];
sg_io_hdr_t io_hdr;
+ int ret = 0;
if ((ioctl (fd, SG_GET_VERSION_NUM, &k) < 0) || (k < 30000)) {
pp_hds_log(0, "can't use SG ioctl interface");
- return -1;
+ goto out;
+
}
memset (&io_hdr, 0, sizeof (sg_io_hdr_t));
@@ -118,11 +120,11 @@ int hds_modular_prio (const char *dev, int fd, unsigned int timeout)
if (ioctl (fd, SG_IO, &io_hdr) < 0) {
pp_hds_log(0, "SG_IO error");
- return -1;
+ goto out;
}
if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK) {
pp_hds_log(0, "SCSI error");
- return -1;
+ goto out;
}
snprintf (vendor, 9, "%.8s", inqBuffp + 8);
@@ -144,11 +146,11 @@ int hds_modular_prio (const char *dev, int fd, unsigned int timeout)
switch (ldev[3]) {
case '0': case '2': case '4': case '6': case '8': case 'A': case 'C': case 'E':
pp_hds_log(4, "CTRL EVEN, LDEV EVEN, PRIO 1");
- return 1;
+ ret = 1;
break;
case '1': case '3': case '5': case '7': case '9': case 'B': case 'D': case 'F':
pp_hds_log(4, "CTRL EVEN, LDEV ODD, PRIO 0");
- return 0;
+ ret = 0;
break;
}
break;
@@ -156,16 +158,18 @@ int hds_modular_prio (const char *dev, int fd, unsigned int timeout)
switch (ldev[3]) {
case '0': case '2': case '4': case '6': case '8': case 'A': case 'C': case 'E':
pp_hds_log(4, "CTRL ODD, LDEV EVEN, PRIO 0");
- return 0;
+ ret = 0;
break;
case '1': case '3': case '5': case '7': case '9': case 'B': case 'D': case 'F':
pp_hds_log(4, "CTRL ODD, LDEV ODD, PRIO 1");
- return 1;
+ ret = 1;
break;
}
break;
}
- return -1;
+
+out:
+ return ret;
}
int getprio (struct path * pp, __attribute__((unused)) char *args,
diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c
index adc034b..8873440 100644
--- a/libmultipath/structs_vec.c
+++ b/libmultipath/structs_vec.c
@@ -35,8 +35,10 @@ int update_mpp_paths(struct multipath *mpp, vector pathvec)
return 0;
if (!mpp->paths &&
- !(mpp->paths = vector_alloc()))
+ !(mpp->paths = vector_alloc())) {
+ condlog(2, "mpp->paths alloc failed");
return 1;
+ }
vector_foreach_slot (mpp->pg, pgp, i) {
vector_foreach_slot (pgp->paths, pp, j) {
diff --git a/multipathd/main.c b/multipathd/main.c
index 3aff241..02f368a 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -1764,6 +1764,11 @@ enable_group(struct path * pp)
pgp = VECTOR_SLOT(pp->mpp->pg, pp->pgindex - 1);
+ if (!pgp) {
+ condlog(2, "%s: pgp is NULL", pp->mpp->alias);
+ return;
+ }
+
if (pgp->status == PGSTATE_DISABLED) {
condlog(2, "%s: enable group #%i", pp->mpp->alias, pp->pgindex);
dm_enablegroup(pp->mpp->alias, pp->pgindex);
--
1.8.3.1
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化