[dm-devel] [PATCH] This patch filled the host WWNN. when using the command of multipathd to list the isscsi paths informartion, the host WWNN of paths informartion is not exist. like this: multipathd show paths format "%N %R" host WWNN host WWPN [undef] iqn.2006-08.com.huawei:oceanstor:21000022a10beb2a::1020002:129.13.100.240 [undef] iqn.2006-08.com.huawei:oceanstor:21000022a10beb2a::20003:129.13.100.241
s90006763
sunao.sun at huawei.com
Fri Aug 24 11:22:03 UTC 2018
this patch solved this problem and filled the host WWNN.
like this:
multipathd show paths format "%N %R"
host WWNN host WWPN
iqn.1994-05.com.redhat:86329aefccdb iqn.2006-08.com.huawei:oceanstor:21000022a10beb2a::1020002:129.13.100.240
iqn.1994-05.com.redhat:86329aefccdb iqn.2006-08.com.huawei:oceanstor:21000022a10beb2a::20003:129.13.100.241
---
libmultipath/print.c | 52 +++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 39 insertions(+), 13 deletions(-)
diff --git a/libmultipath/print.c b/libmultipath/print.c
index 9da6a77c..e2b90301 100644
--- a/libmultipath/print.c
+++ b/libmultipath/print.c
@@ -539,20 +539,39 @@ snprint_host_attr (char * buff, size_t len, const struct path * pp, char *attr)
char host_id[32];
const char *value = NULL;
int ret;
-
- if (pp->sg_id.proto_id != SCSI_PROTOCOL_FCP)
+
+ if ((pp->sg_id.proto_id != SCSI_PROTOCOL_FCP) && (pp->sg_id.proto_id != SCSI_PROTOCOL_ISCSI) )
return snprintf(buff, len, "[undef]");
- sprintf(host_id, "host%d", pp->sg_id.host_no);
- host_dev = udev_device_new_from_subsystem_sysname(udev, "fc_host",
- host_id);
- if (!host_dev) {
- condlog(1, "%s: No fc_host device for '%s'", pp->dev, host_id);
- goto out;
+ if((pp->sg_id.proto_id == SCSI_PROTOCOL_ISCSI) && strcmp(buff, wwid) == 0)
+
+ if(pp->sg_id.proto_id == SCSI_PROTOCOL_FCP)
+ {
+ sprintf(host_id, "host%d", pp->sg_id.host_no);
+ host_dev = udev_device_new_from_subsystem_sysname(udev, "fc_host",
+ host_id);
+ if (!host_dev) {
+ condlog(1, "%s: No fc_host device for '%s'", pp->dev, host_id);
+ goto out;
+ }
+ value = udev_device_get_sysattr_value(host_dev, attr);
+ if (value)
+ ret = snprint_str(buff, len, value);
+ udev_device_unref(host_dev);
+ }
+ else if(pp->sg_id.proto_id == SCSI_PROTOCOL_ISCSI)
+ {
+ sprintf(host_id, "session%d", pp->sg_id.transport_id);
+ host_dev = udev_device_new_from_subsystem_sysname(udev, "iscsi_session",
+ host_id);
+ if (!host_dev) {
+ condlog(3, "%s: No iscsi_session for '%s'", pp->dev, host_id);
+ goto out;
+ }
+ value = udev_device_get_sysattr_value(host_dev, attr);
+ if (value)
+ ret = snprint_str(buff, len, value);
+ udev_device_unref(host_dev);
}
- value = udev_device_get_sysattr_value(host_dev, attr);
- if (value)
- ret = snprint_str(buff, len, value);
- udev_device_unref(host_dev);
out:
if (!value)
ret = snprintf(buff, len, "[unknown]");
@@ -562,7 +581,14 @@ out:
int
snprint_host_wwnn (char * buff, size_t len, const struct path * pp)
{
- return snprint_host_attr(buff, len, pp, "node_name");
+ if(pp->sg_id.proto_id == SCSI_PROTOCOL_ISCSI)
+ {
+ return snprint_host_attr(buff, len, pp, "initiatorname");
+ }
+ else
+ {
+ return snprint_host_attr(buff, len, pp, "node_name");
+ }
}
int
--
2.12.0.windows.1
More information about the dm-devel
mailing list