From a094452bde92557d722c050f62288bdf51b99d3f Mon Sep 17 00:00:00 2001 From: mchristi Date: Mon, 18 Apr 2011 18:06:37 +0000 Subject: [PATCH] Resolves: #696267 --- ...-initiator-utils-fix-bnx2i-mac-match.patch | 114 ++++++++++++++++++ iscsi-initiator-utils.spec | 9 +- 2 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 iscsi-initiator-utils-fix-bnx2i-mac-match.patch diff --git a/iscsi-initiator-utils-fix-bnx2i-mac-match.patch b/iscsi-initiator-utils-fix-bnx2i-mac-match.patch new file mode 100644 index 0000000..09fafbc --- /dev/null +++ b/iscsi-initiator-utils-fix-bnx2i-mac-match.patch @@ -0,0 +1,114 @@ +diff -aurp open-iscsi-2.0-872-rc4-bnx2i/usr/iface.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/iface.c +--- open-iscsi-2.0-872-rc4-bnx2i/usr/iface.c 2011-04-18 12:50:45.000000000 -0500 ++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iface.c 2011-04-18 12:51:50.000000000 -0500 +@@ -788,42 +788,50 @@ void iface_link_ifaces(struct list_head + int iface_setup_from_boot_context(struct iface_rec *iface, + struct boot_context *context) + { ++ struct iscsi_transport *t; ++ uint32_t hostno; ++ int rc; ++ + if (strlen(context->initiatorname)) + strlcpy(iface->iname, context->initiatorname, + sizeof(iface->iname)); + + if (strlen(context->scsi_host_name)) { +- struct iscsi_transport *t; +- uint32_t hostno; +- + if (sscanf(context->scsi_host_name, "iscsi_boot%u", &hostno) != 1) { + log_error("Could not parse %s's host no.", + context->scsi_host_name); + return 0; + } +- t = iscsi_sysfs_get_transport_by_hba(hostno); +- if (!t) { +- log_error("Could not get transport for %s. " +- "Make sure the iSCSI driver is loaded.", +- context->scsi_host_name); ++ } else if (strlen(context->iface)) { ++ hostno = iscsi_sysfs_get_host_no_from_hwaddress(context->mac, ++ &rc); ++ if (rc) { ++ /* ++ * If the MAC in the boot info does not match a iscsi ++ * host then the MAC must be for network card, so boot ++ * is not going to be offloaded. ++ */ ++ log_debug(3, "Could not match %s to host\n", ++ context->mac); + return 0; + } + +- log_debug(3, "boot context has %s transport %s", +- context->scsi_host_name, t->name); +- strcpy(iface->transport_name, t->name); +- } else if (strlen(context->iface) && +- (!net_get_transport_name_from_netdev(context->iface, +- iface->transport_name))) { +- log_debug(3, "boot context has netdev %s", +- context->iface); +- strlcpy(iface->netdev, context->iface, +- sizeof(iface->netdev)); ++ strlcpy(iface->netdev, context->iface, sizeof(iface->netdev)); + } else + return 0; ++ + /* + * set up for access through a offload card. + */ ++ t = iscsi_sysfs_get_transport_by_hba(hostno); ++ if (!t) { ++ log_error("Could not get transport for host%u. " ++ "Make sure the iSCSI driver is loaded.", ++ hostno); ++ return 0; ++ } ++ strcpy(iface->transport_name, t->name); ++ + memset(iface->name, 0, sizeof(iface->name)); + snprintf(iface->name, sizeof(iface->name), "%s.%s", + iface->transport_name, context->mac); +diff -aurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_sysfs.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_sysfs.c +--- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_sysfs.c 2011-04-18 12:50:45.000000000 -0500 ++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_sysfs.c 2011-04-18 12:51:30.000000000 -0500 +@@ -332,7 +332,7 @@ static int __get_host_no_from_hwaddress( + return 0; + } + +-static uint32_t get_host_no_from_hwaddress(char *address, int *rc) ++uint32_t iscsi_sysfs_get_host_no_from_hwaddress(char *hwaddress, int *rc) + { + uint32_t host_no = -1; + struct host_info *info; +@@ -345,7 +345,7 @@ static uint32_t get_host_no_from_hwaddre + *rc = ISCSI_ERR_NOMEM; + return -1; + } +- strcpy(info->iface.hwaddress, address); ++ strcpy(info->iface.hwaddress, hwaddress); + + local_rc = iscsi_sysfs_for_each_host(info, &nr_found, + __get_host_no_from_hwaddress); +@@ -401,7 +401,8 @@ uint32_t iscsi_sysfs_get_host_no_from_hw + + if (strlen(iface->hwaddress) && + strcasecmp(iface->hwaddress, DEFAULT_HWADDRESS)) +- host_no = get_host_no_from_hwaddress(iface->hwaddress, &tmp_rc); ++ host_no = iscsi_sysfs_get_host_no_from_hwaddress( ++ iface->hwaddress, &tmp_rc); + else if (strlen(iface->netdev) && + strcasecmp(iface->netdev, DEFAULT_NETDEV)) + host_no = get_host_no_from_netdev(iface->netdev, &tmp_rc); +diff -aurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_sysfs.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_sysfs.h +--- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_sysfs.h 2011-04-18 12:50:45.000000000 -0500 ++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_sysfs.h 2011-04-18 12:51:30.000000000 -0500 +@@ -51,6 +51,7 @@ extern int iscsi_sysfs_for_each_host(voi + extern uint32_t iscsi_sysfs_get_host_no_from_sid(uint32_t sid, int *err); + extern uint32_t iscsi_sysfs_get_host_no_from_hwinfo(struct iface_rec *iface, + int *rc); ++extern uint32_t iscsi_sysfs_get_host_no_from_hwaddress(char *hwaddress, int *rc); + extern int iscsi_sysfs_get_hostinfo_by_host_no(struct host_info *hinfo); + extern int iscsi_sysfs_get_sid_from_path(char *session); + extern char *iscsi_sysfs_get_blockdev_from_lun(int hostno, int target, int sid); diff --git a/iscsi-initiator-utils.spec b/iscsi-initiator-utils.spec index 234cfbd..2ce83a7 100644 --- a/iscsi-initiator-utils.spec +++ b/iscsi-initiator-utils.spec @@ -3,7 +3,7 @@ Summary: iSCSI daemon and utility programs Name: iscsi-initiator-utils Version: 6.2.0.872 -Release: 19%{?dist} +Release: 20%{?dist} Source0: http://people.redhat.com/mchristi/iscsi/rhel6.0/source/open-iscsi-2.0-872-rc4-bnx2i.tar.gz Source1: iscsid.init Source2: iscsidevs.init @@ -45,6 +45,8 @@ Patch14: iscsi-initiator-utils-libiscsi-nodes-remember-the-interface.patch Patch15: iscsi-initiator-utils-fixes.patch # node mode hostname support Patch16: iscsi-initiator-utils-node-hostname.patch +# created offload boot session if ibft and iscsi_host mac match +Patch17: iscsi-initiator-utils-fix-bnx2i-mac-match.patch Group: System Environment/Daemons License: GPLv2+ @@ -89,6 +91,7 @@ developing applications that use %{name}. %patch14 -p1 -b .libiscsi-remember-the-interface %patch15 -p1 -b .fixes %patch16 -p1 -b .node-hostname +%patch17 -p1 -b .fix-bnx2i-mac-match %build cd utils/open-isns @@ -207,6 +210,10 @@ fi %{_includedir}/libiscsi.h %changelog +* Mon Apr 18 2011 Mike Christie 6.2.0.872.20 +- 696267 Create a offloaded session if the iscsi_host MAC and ibft +MAC match. This enables support for Broadcoms hba boot mode. + * Tue Apr 5 2011 Mike Christie 6.2.0.872.19 - 624437 support hostnames in node mode. [patch merged in .14 got dropped by accident]