[iscsi-initiator-utils: 59/109] Resolves: #523492

Chris Leech cleech at fedoraproject.org
Tue Dec 10 21:24:20 UTC 2013


commit 67e6c6ab8ebd99dc5b868af4505efe22e8c07dd0
Author: mchristi <mchristi at redhat.com>
Date:   Fri Feb 4 06:10:58 2011 +0000

    Resolves: #523492

 iscsi-initiator-utils-dcb.patch        |  614 ++++++++++++++++++++++++++++++++
 iscsi-initiator-utils-sync-iscsi.patch |  170 +++++-----
 iscsi-initiator-utils.spec             |   15 +-
 3 files changed, 712 insertions(+), 87 deletions(-)
---
diff --git a/iscsi-initiator-utils-dcb.patch b/iscsi-initiator-utils-dcb.patch
new file mode 100644
index 0000000..4c54470
--- /dev/null
+++ b/iscsi-initiator-utils-dcb.patch
@@ -0,0 +1,614 @@
+diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/libiscsi/Makefile open-iscsi-2.0-872-rc4-bnx2i.work/libiscsi/Makefile
+--- open-iscsi-2.0-872-rc4-bnx2i/libiscsi/Makefile	2011-02-03 23:56:36.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/libiscsi/Makefile	2011-02-03 23:57:29.000000000 -0600
+@@ -13,7 +13,7 @@ TESTS += tests/test_set_auth tests/test_
+ 
+ COMMON_SRCS = sysdeps.o
+ # sources shared between iscsid, iscsiadm and iscsistart
+-ISCSI_LIB_SRCS = netlink.o uip_mgmt_ipc.o transport.o cxgbi.o be2iscsi.o iscsi_timer.o initiator_common.o iscsi_err.o session_info.o iscsi_util.o io.o auth.o discovery.o login.o log.o md5.o sha1.o iface.o idbm.o sysfs.o iscsi_sysfs.o iscsi_net_util.o iscsid_req.o
++ISCSI_LIB_SRCS = dcb_app.o netlink.o uip_mgmt_ipc.o transport.o cxgbi.o be2iscsi.o iscsi_timer.o initiator_common.o iscsi_err.o session_info.o iscsi_util.o io.o auth.o discovery.o login.o log.o md5.o sha1.o iface.o idbm.o sysfs.o iscsi_sysfs.o iscsi_net_util.o iscsid_req.o
+ FW_PARAM_SRCS = fw_entry.o prom_lex.o prom_parse.tab.o fwparam_ppc.o fwparam_sysfs.o
+ 
+ # sources shared with the userspace utils, note we build these separately
+diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/dcb_app.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/dcb_app.c
+--- open-iscsi-2.0-872-rc4-bnx2i/usr/dcb_app.c	1969-12-31 18:00:00.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/dcb_app.c	2011-02-03 23:54:11.000000000 -0600
+@@ -0,0 +1,246 @@
++/*******************************************************************************
++
++  DCB application support
++  Copyright(c) 2007-2010 Intel Corporation.
++
++  This program is free software; you can redistribute it and/or modify it
++  under the terms and conditions of the GNU General Public License,
++  version 2, as published by the Free Software Foundation.
++
++  This program is distributed in the hope it will be useful, but WITHOUT
++  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
++  more details.
++
++  You should have received a copy of the GNU General Public License along with
++  this program; if not, write to the Free Software Foundation, Inc.,
++  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
++
++  The full GNU General Public License is included in this distribution in
++  the file called "COPYING".
++
++  Contact Information:
++  e1000-eedc Mailing List <e1000-eedc at lists.sourceforge.net>
++  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
++
++*******************************************************************************/
++
++#include <unistd.h>
++#include <stdlib.h>
++#include <string.h>
++#include <errno.h>
++#include <asm/errno.h>
++#include <fcntl.h>
++#include <sys/socket.h>
++#include <net/if.h>
++#include <linux/netlink.h>
++#include <linux/rtnetlink.h>
++#include <linux/dcbnl.h>
++#include "dcb_app.h"
++#include "sysfs.h"
++
++#define NLA_DATA(nla)        ((void *)((char*)(nla) + NLA_HDRLEN))
++
++/* Maximum size of response requested or message sent */
++#define MAX_MSG_SIZE    1024
++
++static struct nlmsghdr *start_dcbmsg(__u16 msg_type, __u8 arg)
++{
++	struct nlmsghdr *nlh;
++	struct dcbmsg *d;
++
++	nlh = malloc(MAX_MSG_SIZE);
++	if (!nlh)
++		return NULL;
++	memset(nlh, 0, MAX_MSG_SIZE);
++	nlh->nlmsg_type = msg_type;
++	nlh->nlmsg_flags = NLM_F_REQUEST;
++	nlh->nlmsg_seq = 0;
++	nlh->nlmsg_pid = getpid();
++	if (msg_type != RTM_GETDCB) {
++		free(nlh);
++		return NULL;
++	}
++
++	nlh->nlmsg_len = NLMSG_LENGTH(sizeof(struct dcbmsg));
++	d = NLMSG_DATA(nlh);
++	d->cmd = arg;
++	d->dcb_family = AF_UNSPEC;
++	d->dcb_pad = 0;
++
++	return nlh;
++}
++
++static struct rtattr *add_rta(struct nlmsghdr *nlh, __u16 rta_type,
++                              void *attr, __u16 rta_len)
++{
++	struct rtattr *rta;
++
++	rta = (struct rtattr *)((char *)nlh + nlh->nlmsg_len);
++	rta->rta_type = rta_type;
++	rta->rta_len = rta_len + NLA_HDRLEN;
++	if (attr)
++		memcpy(NLA_DATA(rta), attr, rta_len);
++	nlh->nlmsg_len += NLMSG_ALIGN(rta->rta_len);
++
++	return rta;
++}
++
++static int dcbnl_send_msg(int nl_sd, struct nlmsghdr *nlh)
++{
++	struct sockaddr_nl nladdr;
++	void *buf = nlh;
++	int r, len = nlh->nlmsg_len;
++
++	memset(&nladdr, 0, sizeof(nladdr));
++	nladdr.nl_family = AF_NETLINK;
++	
++	do {
++		r = sendto(nl_sd, buf, len, 0, (struct sockaddr *)&nladdr,
++			sizeof(nladdr));
++	} while (r < 0 && errno == EINTR);
++
++	if (r < 0)
++		return 1;
++
++	return 0;
++}
++
++static struct nlmsghdr *dcbnl_get_msg(int nl_sd)
++{
++	struct nlmsghdr *nlh;
++	int len;
++
++	nlh = malloc(MAX_MSG_SIZE);
++	if (!nlh)
++		return NULL;
++	memset(nlh, 0, MAX_MSG_SIZE);
++
++	len = recv(nl_sd, (void *)nlh, MAX_MSG_SIZE, 0);
++
++	if (len < 0 || nlh->nlmsg_type == NLMSG_ERROR ||
++	    !NLMSG_OK(nlh, (unsigned int)len)) {
++		free(nlh);
++		return NULL;
++	}
++
++	return nlh;
++}
++
++static int get_app_cfg(const char *ifname, __u8 req_idtype, __u16 req_id)
++{
++	struct nlmsghdr *nlh;
++	struct dcbmsg *d;
++	struct rtattr *rta_parent, *rta_child;
++	int rval = 0;
++	int nl_sd;
++	unsigned int seq;
++	__u8 idtype;
++	__u16 id;
++
++	nlh = start_dcbmsg(RTM_GETDCB, DCB_CMD_GAPP);
++	if (!nlh)
++		return -EIO;
++
++	seq = nlh->nlmsg_seq;
++	add_rta(nlh, DCB_ATTR_IFNAME, (void *)ifname, strlen(ifname) + 1);
++	rta_parent = add_rta(nlh, DCB_ATTR_APP, NULL, 0);
++
++	rta_child = add_rta(nlh, DCB_APP_ATTR_IDTYPE, 
++		(void *)&req_idtype, sizeof(__u8));
++	rta_parent->rta_len += NLA_ALIGN(rta_child->rta_len);
++
++	rta_child = add_rta(nlh, DCB_APP_ATTR_ID, 
++		(void *)&req_id, sizeof(__u16));
++	rta_parent->rta_len += NLA_ALIGN(rta_child->rta_len);
++
++	nl_sd = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
++	if (nl_sd < 0)
++		return nl_sd;
++
++	rval = dcbnl_send_msg(nl_sd, nlh);
++	free(nlh);
++	if (rval) {
++		close(nl_sd);
++		return -EIO;
++	}
++
++	nlh = dcbnl_get_msg(nl_sd);
++	close(nl_sd);
++	if (!nlh)
++		return -EIO;
++
++	d = (struct dcbmsg *)NLMSG_DATA(nlh);
++	rta_parent = (struct rtattr *)(((char *)d) +
++		NLMSG_ALIGN(sizeof(struct dcbmsg)));
++
++	if (d->cmd != DCB_CMD_GAPP) {
++		rval = -EIO;
++		goto get_error;
++	} 
++	if (rta_parent->rta_type != DCB_ATTR_APP) {
++		rval = -EIO;
++		goto get_error;
++	}
++
++	rta_child = NLA_DATA(rta_parent);
++	rta_parent = (struct rtattr *)((char *)rta_parent +
++	                               NLMSG_ALIGN(rta_parent->rta_len));
++
++	idtype = *(__u8 *)NLA_DATA(rta_child);
++	rta_child = (struct rtattr *)((char *)rta_child +
++		             NLMSG_ALIGN(rta_child->rta_len));
++	if (idtype != req_idtype) {
++		rval = -EIO;
++		goto get_error;
++	}
++
++	id = *(__u16 *)NLA_DATA(rta_child);
++	rta_child = (struct rtattr *)((char *)rta_child +
++		             NLMSG_ALIGN(rta_child->rta_len));
++	if (id != req_id) {
++		rval = -EIO;
++		goto get_error;
++	}
++
++	rval = *(__u8 *)NLA_DATA(rta_child);
++	rta_child = (struct rtattr *)((char *)rta_child +
++		             NLMSG_ALIGN(rta_child->rta_len));
++
++get_error:
++	free(nlh);
++	return rval;
++}
++
++static int get_link_ifname(const char *ifname, char *link_ifname)
++{
++	int ifindex;
++
++	if (sysfs_get_int(ifname, "net", "iflink", &ifindex))
++		return -EIO;
++
++	if (!if_indextoname(ifindex, link_ifname))
++		return -ENODEV;
++
++	return 0;
++}
++
++int get_dcb_app_pri_by_port(const char *ifname, int port)
++{
++	char link_ifname[IFNAMSIZ];
++
++	if (get_link_ifname(ifname, link_ifname))
++		return 0;
++
++	return get_app_cfg(link_ifname, DCB_APP_IDTYPE_PORTNUM, port);
++}
++
++int get_dcb_app_pri_by_ethtype(const char *ifname, int ethtype)
++{
++	char link_ifname[IFNAMSIZ];
++
++	if (get_link_ifname(ifname, link_ifname))
++		return 0;
++
++	return get_app_cfg(link_ifname, DCB_APP_IDTYPE_ETHTYPE, ethtype);
++}
+diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/dcb_app.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/dcb_app.h
+--- open-iscsi-2.0-872-rc4-bnx2i/usr/dcb_app.h	1969-12-31 18:00:00.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/dcb_app.h	2011-02-03 23:54:07.000000000 -0600
+@@ -0,0 +1,34 @@
++/*******************************************************************************
++
++  DCB application support
++  Copyright(c) 2007-2010 Intel Corporation.
++
++  This program is free software; you can redistribute it and/or modify it
++  under the terms and conditions of the GNU General Public License,
++  version 2, as published by the Free Software Foundation.
++
++  This program is distributed in the hope it will be useful, but WITHOUT
++  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
++  more details.
++
++  You should have received a copy of the GNU General Public License along with
++  this program; if not, write to the Free Software Foundation, Inc.,
++  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
++
++  The full GNU General Public License is included in this distribution in
++  the file called "COPYING".
++
++  Contact Information:
++  e1000-eedc Mailing List <e1000-eedc at lists.sourceforge.net>
++  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
++
++*******************************************************************************/
++
++#ifndef _DCB_APP_H_
++#define _DCB_APP_H_
++
++int get_dcb_app_pri_by_port(const char *iface, int port);
++int get_dcb_app_pri_by_ethtype(const char *iface, int ethtype);
++
++#endif  /* _DCB_APP_H_ */
+diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/io.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/io.c
+--- open-iscsi-2.0-872-rc4-bnx2i/usr/io.c	2011-02-04 00:02:19.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/io.c	2011-02-03 23:54:15.000000000 -0600
+@@ -26,11 +26,14 @@
+ #include <fcntl.h>
+ #include <sys/poll.h>
+ #include <sys/ioctl.h>
++#include <sys/types.h>
++#include <ifaddrs.h>
+ #include <netinet/tcp.h>
+ #include <arpa/inet.h>
+ 
+ #include "types.h"
+ #include "iscsi_proto.h"
++#include "iscsi_settings.h"
+ #include "initiator.h"
+ #include "iscsi_ipc.h"
+ #include "log.h"
+@@ -38,6 +41,7 @@
+ #include "idbm.h"
+ #include "iface.h"
+ #include "sysdeps.h"
++#include "dcb_app.h"
+ 
+ #define LOG_CONN_CLOSED(conn) \
+ do { \
+@@ -53,6 +57,13 @@ do { \
+ 	log_error("Connection to Discovery Address %s failed", conn->host); \
+ } while (0)
+ 
++union sockaddr_u {
++	struct sockaddr_storage	ss;
++	struct sockaddr sa;
++	struct sockaddr_in si;
++	struct sockaddr_in6 si6;
++};
++
+ static int timedout;
+ 
+ static void
+@@ -76,6 +87,90 @@ set_non_blocking(int fd)
+ 
+ }
+ 
++static int select_priority(struct iscsi_conn *conn, int pri_mask)
++{
++	int msk;
++
++	if (!pri_mask)
++		return 0;
++
++	/*
++	 * TODO: Configure priority selection from the mask
++	 * For now, just always take the highest
++	 */
++
++	/* Find highest bit set */
++	while ((msk = pri_mask & (pri_mask - 1)))
++		pri_mask = msk;
++
++	return ffs(pri_mask) - 1;
++}
++
++static int
++inet_cmp_addr(const union sockaddr_u *s1, const union sockaddr_u *s2)
++{
++	const struct sockaddr_in *si1 = &s1->si;
++	const struct sockaddr_in *si2 = &s2->si;
++
++	return si1->sin_addr.s_addr != si2->sin_addr.s_addr;
++}
++
++static int
++inet6_cmp_addr(const union sockaddr_u *s1, const union sockaddr_u *s2)
++{
++	const struct sockaddr_in6 *si1 = &s1->si6;
++	const struct sockaddr_in6 *si2 = &s2->si6;
++
++	return memcmp(&si1->sin6_addr, &si2->sin6_addr, sizeof(si1->sin6_addr));
++}
++
++static char *
++find_ifname(const struct ifaddrs *ifa, const union sockaddr_u *ss)
++{
++	for (; ifa; ifa = ifa->ifa_next) {
++		if (ss->ss.ss_family != ifa->ifa_addr->sa_family)
++			continue;
++		switch (ss->ss.ss_family) {
++		case AF_INET:
++			if (inet_cmp_addr(ss, (union sockaddr_u *)ifa->ifa_addr) == 0)
++				return ifa->ifa_name;
++			break;
++		case AF_INET6:
++			if (inet6_cmp_addr(ss, (union sockaddr_u *)ifa->ifa_addr) == 0)
++				return ifa->ifa_name;
++			break;
++		}
++	}
++
++	return NULL;
++}
++
++static void set_dcb_priority(struct iscsi_conn *conn, const char *devname)
++{
++	int pri_mask = 0;
++
++	pri_mask = get_dcb_app_pri_by_port(devname, ISCSI_DEFAULT_PORT);
++	if (pri_mask < 0)
++		log_debug(2, "Getting priority for %s returned %d",
++				devname, pri_mask);
++	else if (pri_mask == 0)
++		log_debug(2, "No priority for %s", devname);
++	else {
++		int pri = select_priority(conn, pri_mask);
++		int rc;
++
++		log_debug(1, "Setting socket %d priority to %d",
++				conn->socket_fd, pri);
++		rc = setsockopt(conn->socket_fd, SOL_SOCKET,
++				SO_PRIORITY, &pri, sizeof(pri));
++		if (rc < 0) {
++			log_warning("Setting socket %d priority to %d failed "
++					"with errno %d", conn->socket_fd,
++					pri, errno);
++		}
++	}
++}
++
+ #if 0
+ /* not used by anyone */
+ static int get_hwaddress_from_netdev(char *netdev, char *hwaddress)
+@@ -320,6 +415,10 @@ iscsi_io_tcp_connect(iscsi_conn_t *conn,
+ 	log_debug(1, "connecting to %s:%s", conn->host, serv);
+ 	if (non_blocking)
+ 		set_non_blocking(conn->socket_fd);
++
++	if (conn->session->netdev[0])
++		set_dcb_priority(conn, conn->session->netdev);
++
+ 	rc = connect(conn->socket_fd, (struct sockaddr *) ss, sizeof (*ss));
+ 	return rc;
+ }
+@@ -368,8 +467,9 @@ iscsi_io_tcp_poll(iscsi_conn_t *conn, in
+ 	}
+ 
+ 	len = sizeof(ss);
+-	if (log_level > 0 &&
+-	    getsockname(conn->socket_fd, (struct sockaddr *) &ss, &len) >= 0) {
++	if (log_level > 0 || !conn->session->netdev)
++		rc = getsockname(conn->socket_fd, (struct sockaddr *)&ss, &len);
++	if (log_level > 0 && rc >= 0) {
+ 		getnameinfo((struct sockaddr *) &conn->saddr,
+ 			    sizeof(conn->saddr), conn->host,
+ 			    sizeof(conn->host), serv, sizeof(serv),
+@@ -381,6 +481,22 @@ iscsi_io_tcp_poll(iscsi_conn_t *conn, in
+ 		log_debug(1, "connected local port %s to %s:%s",
+ 			  lserv, conn->host, serv);
+ 	}
++
++	if (!conn->session->netdev[0] && rc >= 0) {
++		struct ifaddrs *ifa;
++		char *ifname;
++
++		rc = getifaddrs(&ifa);
++		if (rc < 0)
++			log_error("getifaddrs failed with %d\n", errno);
++		else {
++			ifname = find_ifname(ifa, (union sockaddr_u *)&ss);
++			if (ifname)
++				set_dcb_priority(conn, ifname);
++			freeifaddrs(ifa);
++		}
++	}
++
+ 	return 1;
+ }
+ 
+diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/Makefile open-iscsi-2.0-872-rc4-bnx2i.work/usr/Makefile
+--- open-iscsi-2.0-872-rc4-bnx2i/usr/Makefile	2011-02-04 00:02:19.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/Makefile	2011-02-03 23:54:31.000000000 -0600
+@@ -21,10 +21,12 @@ ifeq ($(OSNAME),Linux)
+ 	endif
+ 	endif
+ IPC_OBJ=netlink.o
++DCB_OBJ=dcb_app.o
+ else
+ ifeq ($(OSNAME),FreeBSD)
+ IPC_CFLAGS=
+ IPC_OBJ=ioctl.o
++DCB_OBJ=
+ endif
+ endif
+ 
+@@ -40,7 +42,7 @@ SYSDEPS_SRCS = $(wildcard ../utils/sysde
+ ISCSI_LIB_SRCS = iscsi_util.o io.o auth.o iscsi_timer.o login.o log.o md5.o \
+ 	sha1.o iface.o idbm.o sysfs.o host.o session_info.o iscsi_sysfs.o \
+ 	iscsi_net_util.o iscsid_req.o transport.o cxgbi.o be2iscsi.o \
+-	initiator_common.o iscsi_err.o uip_mgmt_ipc.o $(IPC_OBJ)  $(SYSDEPS_SRCS)
++	initiator_common.o iscsi_err.o uip_mgmt_ipc.o $(DCB_OBJ) $(IPC_OBJ)  $(SYSDEPS_SRCS)
+ # core initiator files
+ INITIATOR_SRCS = initiator.o scsi.o actor.o event_poll.o mgmt_ipc.o
+ 
+diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/Makefile.orig open-iscsi-2.0-872-rc4-bnx2i.work/usr/Makefile.orig
+--- open-iscsi-2.0-872-rc4-bnx2i/usr/Makefile.orig	1969-12-31 18:00:00.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/Makefile.orig	2011-02-03 23:53:53.000000000 -0600
+@@ -0,0 +1,71 @@
++# This Makefile will work only with GNU make.
++
++OSNAME=$(shell uname -s)
++
++# allow users to override these
++# eg to compile for a kernel that you aren't currently running
++KERNELRELEASE ?= $(shell uname -r)
++KSRC ?= /lib/modules/$(KERNELRELEASE)/build
++
++KSUBLEVEL=$(shell cat $(KSRC)/Makefile | awk -F= '/^SUBLEVEL =/ {print $$2}' | \
++			sed 's/^[ \t]*//;s/[ \t]*$$//')
++
++ifeq ($(OSNAME),Linux)
++	ifeq ($(KSUBLEVEL),11)
++		IPC_CFLAGS=-DNETLINK_ISCSI=12 -D_GNU_SOURCE
++	else
++	ifeq ($(KSUBLEVEL),12)
++		IPC_CFLAGS=-DNETLINK_ISCSI=12 -D_GNU_SOURCE
++	else
++		IPC_CFLAGS=-DNETLINK_ISCSI=8 -D_GNU_SOURCE
++	endif
++	endif
++IPC_OBJ=netlink.o
++else
++ifeq ($(OSNAME),FreeBSD)
++IPC_CFLAGS=
++IPC_OBJ=ioctl.o
++endif
++endif
++
++OPTFLAGS ?= -O2 -g
++WARNFLAGS ?= -Wall -Wstrict-prototypes
++CFLAGS += $(OPTFLAGS) $(WARNFLAGS) -I../include -I. -I../utils/open-isns \
++					-D$(OSNAME) $(IPC_CFLAGS) -DISNS_ENABLE
++PROGRAMS = iscsid iscsiadm iscsistart
++
++# libc compat files
++SYSDEPS_SRCS = $(wildcard ../utils/sysdeps/*.o)
++# sources shared between iscsid, iscsiadm and iscsistart
++ISCSI_LIB_SRCS = iscsi_util.o io.o auth.o iscsi_timer.o login.o log.o md5.o \
++	sha1.o iface.o idbm.o sysfs.o host.o session_info.o iscsi_sysfs.o \
++	iscsi_net_util.o iscsid_req.o transport.o cxgbi.o be2iscsi.o \
++	initiator_common.o iscsi_err.o uip_mgmt_ipc.o $(IPC_OBJ)  $(SYSDEPS_SRCS)
++# core initiator files
++INITIATOR_SRCS = initiator.o scsi.o actor.o event_poll.o mgmt_ipc.o
++
++# fw boot files
++FW_BOOT_SRCS = $(wildcard ../utils/fwparam_ibft/*.o)
++
++# core discovery files
++DISCOVERY_SRCS = $(FW_BOOT_SRCS) strings.o discovery.o
++
++all: $(PROGRAMS)
++
++iscsid: $(ISCSI_LIB_SRCS) $(INITIATOR_SRCS) $(DISCOVERY_SRCS) \
++	iscsid.o session_mgmt.o discoveryd.o
++	$(CC) $(CFLAGS) $^ -o $@ -L../utils/open-isns -lisns
++
++iscsiadm: $(ISCSI_LIB_SRCS) $(DISCOVERY_SRCS) iscsiadm.o session_mgmt.o
++	$(CC) $(CFLAGS) $^ -o $@ -L../utils/open-isns -lisns
++
++iscsistart: $(ISCSI_LIB_SRCS) $(INITIATOR_SRCS) $(FW_BOOT_SRCS) \
++		iscsistart.o statics.o
++	$(CC) $(CFLAGS) $^ -o $@
++clean:
++	rm -f *.o $(PROGRAMS) .depend $(LIBSYS)
++
++depend:
++	gcc $(CFLAGS) -M `ls *.c` > .depend
++
++-include .depend
+diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/sysfs.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/sysfs.c
+--- open-iscsi-2.0-872-rc4-bnx2i/usr/sysfs.c	2011-02-04 00:02:19.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/sysfs.c	2011-02-03 23:54:03.000000000 -0600
+@@ -547,7 +547,7 @@ found:
+ }
+ 
+ 
+-char *sysfs_get_value(char *id, char *subsys, char *param)
++char *sysfs_get_value(const char *id, char *subsys, char *param)
+ {
+ 	char devpath[PATH_SIZE];
+ 	char *sysfs_value;
+@@ -590,7 +590,7 @@ int sysfs_get_uint(char *id, char *subsy
+ 	return 0;
+ }
+ 
+-int sysfs_get_int(char *id, char *subsys, char *param, int *value)
++int sysfs_get_int(const char *id, char *subsys, char *param, int *value)
+ {
+ 	char *sysfs_value;
+ 
+diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/sysfs.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/sysfs.h
+--- open-iscsi-2.0-872-rc4-bnx2i/usr/sysfs.h	2011-02-04 00:02:19.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/sysfs.h	2011-02-03 23:54:03.000000000 -0600
+@@ -51,10 +51,10 @@ extern char *sysfs_attr_get_value(const 
+ extern int sysfs_resolve_link(char *path, size_t size);
+ extern int sysfs_lookup_devpath_by_subsys_id(char *devpath, size_t len, const char *subsystem, const char *id);
+ 
+-extern char *sysfs_get_value(char *id, char *subsys, char *param);
++extern char *sysfs_get_value(const char *id, char *subsys, char *param);
+ extern int sysfs_get_uint(char *id, char *subsys, char *param,
+ 			  unsigned int *value);
+-extern int sysfs_get_int(char *id, char *subsys, char *param, int *value);
++extern int sysfs_get_int(const char *id, char *subsys, char *param, int *value);
+ extern int sysfs_get_str(char *id, char *subsys, char *param, char *value,
+ 			 int value_size);
+ extern int sysfs_get_uint64(char *id, char *subsys, char *param,
diff --git a/iscsi-initiator-utils-sync-iscsi.patch b/iscsi-initiator-utils-sync-iscsi.patch
index 39d6c07..f2e3db3 100644
--- a/iscsi-initiator-utils-sync-iscsi.patch
+++ b/iscsi-initiator-utils-sync-iscsi.patch
@@ -1,6 +1,6 @@
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/Changelog open-iscsi-2.0-872-rc4-bnx2i.work/Changelog
 --- open-iscsi-2.0-872-rc4-bnx2i/Changelog	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/Changelog	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/Changelog	2011-02-03 20:14:23.000000000 -0600
 @@ -1,132 +1,114 @@
 -open-iscsi-2.0-871 - open-iscsi-2.0.870
 +open-iscsi-2.0-872 - open-iscsi-2.0.871
@@ -245,7 +245,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/Changelog open-iscsi-2.0-872-rc4-bnx2i.
  
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/doc/iscsiadm.8 open-iscsi-2.0-872-rc4-bnx2i.work/doc/iscsiadm.8
 --- open-iscsi-2.0-872-rc4-bnx2i/doc/iscsiadm.8	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/doc/iscsiadm.8	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/doc/iscsiadm.8	2011-02-03 20:14:23.000000000 -0600
 @@ -49,7 +49,13 @@ print debugging information. Valid value
  display help text and exit
  
@@ -416,7 +416,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/doc/iscsiadm.8 open-iscsi-2.0-872-rc4-b
  .nf
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/etc/initd/initd.suse open-iscsi-2.0-872-rc4-bnx2i.work/etc/initd/initd.suse
 --- open-iscsi-2.0-872-rc4-bnx2i/etc/initd/initd.suse	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/etc/initd/initd.suse	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/etc/initd/initd.suse	2011-02-03 20:14:23.000000000 -0600
 @@ -30,7 +30,7 @@ iscsi_login_all_nodes()
  {
  	echo -n "Setting up iSCSI targets: "
@@ -437,7 +437,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/etc/initd/initd.suse open-iscsi-2.0-872
  		    RETVAL=1
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/include/iscsi_err.h open-iscsi-2.0-872-rc4-bnx2i.work/include/iscsi_err.h
 --- open-iscsi-2.0-872-rc4-bnx2i/include/iscsi_err.h	1969-12-31 18:00:00.000000000 -0600
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/include/iscsi_err.h	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/include/iscsi_err.h	2011-02-03 20:14:23.000000000 -0600
 @@ -0,0 +1,69 @@
 +/*
 + * Return codes used by iSCSI tools.
@@ -510,7 +510,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/include/iscsi_err.h open-iscsi-2.0-872-
 +#endif
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/include/iscsi_if.h open-iscsi-2.0-872-rc4-bnx2i.work/include/iscsi_if.h
 --- open-iscsi-2.0-872-rc4-bnx2i/include/iscsi_if.h	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/include/iscsi_if.h	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/include/iscsi_if.h	2011-02-03 20:14:23.000000000 -0600
 @@ -65,6 +65,8 @@ enum iscsi_uevent_e {
  
  	ISCSI_UEVENT_PATH_UPDATE	= UEVENT_BASE + 20,
@@ -540,7 +540,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/include/iscsi_if.h open-iscsi-2.0-872-r
  #define CAP_SENDTARGETS_OFFLOAD	0x400	/* offload discovery process */
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/actor.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/actor.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/actor.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/actor.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/actor.c	2011-02-03 20:14:23.000000000 -0600
 @@ -113,14 +113,13 @@ actor_schedule_private(actor_t *thread, 
  		 * state to scheduled, else add current time to ttschedule and
  		 * insert in the queue at the correct point */
@@ -564,7 +564,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/actor.c open-iscsi-2.0-872-rc4-bnx2
  				if (head)
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/config.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/config.h
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/config.h	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/config.h	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/config.h	2011-02-03 20:14:23.000000000 -0600
 @@ -141,7 +141,8 @@ struct iscsi_sendtargets_config {
  	int discoveryd_poll_inval;
  	struct iscsi_auth_config auth;
@@ -617,7 +617,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/cxgb3i.h open-iscsi-2.0-872-rc4-bnx
 -#endif
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/cxgbi.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/cxgbi.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/cxgbi.c	1969-12-31 18:00:00.000000000 -0600
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/cxgbi.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/cxgbi.c	2011-02-03 20:14:23.000000000 -0600
 @@ -0,0 +1,24 @@
 +/*
 + * cxgb3i/cxgb4i helpers
@@ -645,7 +645,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/cxgbi.c open-iscsi-2.0-872-rc4-bnx2
 +}
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/cxgbi.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/cxgbi.h
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/cxgbi.h	1969-12-31 18:00:00.000000000 -0600
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/cxgbi.h	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/cxgbi.h	2011-02-03 20:14:23.000000000 -0600
 @@ -0,0 +1,8 @@
 +#ifndef CXGBI_TRANSPORT
 +#define CXGBI_TRANSPORT
@@ -657,7 +657,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/cxgbi.h open-iscsi-2.0-872-rc4-bnx2
 +#endif
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/discovery.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/discovery.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/discovery.c	2011-02-03 20:14:32.000000000 -0600
 @@ -43,6 +43,12 @@
  #include "fw_context.h"
  #include "iscsid_req.h"
@@ -947,7 +947,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  				num_targets++;
  				record = NULL;
  				str_truncate_buffer(sendtargets, 0);
-@@ -792,110 +788,42 @@ process_sendtargets_response(struct str_
+@@ -792,110 +788,47 @@ process_sendtargets_response(struct str_
  	return 1;
  }
  
@@ -960,7 +960,8 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
 -/* set timer to now + seconds */
 -static void
 -set_timer(struct timeval *timer, int seconds)
--{
++static void iscsi_free_session(struct iscsi_session *session)
+ {
 -	if (timer) {
 -		memset(timer, 0, sizeof (*timer));
 -		gettimeofday(timer, NULL);
@@ -990,8 +991,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
 -
 -static int
 -msecs_until(struct timeval *timer)
-+static void iscsi_free_session(struct iscsi_session *session)
- {
+-{
 -	struct timeval now;
 -	int msecs;
 -	long partial;
@@ -1029,22 +1029,28 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
 -init_new_session(struct iscsi_sendtargets_config *config,
 -		 struct iface_rec *iface)
 +iscsi_alloc_session(struct iscsi_sendtargets_config *config,
-+		    struct iface_rec *iface)
++		    struct iface_rec *iface, int *rc)
  {
  	iscsi_session_t *session;
  
++	*rc = 0;
++
  	session = calloc(1, sizeof (*session));
- 	if (session == NULL)
+-	if (session == NULL)
 -		goto done;
++	if (session == NULL) {
++		*rc = ISCSI_ERR_NOMEM;
 +		return NULL;
- 
++	}
++
 +	session->t = iscsi_sysfs_get_transport_by_name(iface->transport_name);
 +	if (!session->t) {
 +		log_error("iSCSI driver %s is not loaded. Load the module "
 +			  "then retry the command.\n", iface->transport_name);
++		*rc = ISCSI_ERR_TRANS_NOT_FOUND;
 +		goto fail;
 +	}
-+
+ 
 +	INIT_LIST_HEAD(&session->list);
  	/* initialize the session's leading connection */
 +	session->conn[0].id = 0;
@@ -1078,12 +1084,13 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  
  	/* OUI and uniqifying number */
  	session->isid[0] = DRIVER_ISID_0;
-@@ -914,102 +842,27 @@ init_new_session(struct iscsi_sendtarget
+@@ -914,102 +847,29 @@ init_new_session(struct iscsi_sendtarget
  		if (initiator_name[0] == '\0') {
  			log_error("Cannot perform discovery. Initiatorname "
  				  "required.");
 -			free(session);
 -			return NULL;
++			*rc = ISCSI_ERR_INVAL;
 +			goto fail;
  		}
  	}
@@ -1104,10 +1111,10 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
 -		     struct iscsi_sendtargets_config *config)
 -{
 -	int rc;
--
--	rc = 1;
 +	session->id = -1;
  
+-	rc = 1;
+-
 -	/* if we have any incoming credentials, we insist on authenticating
 -	 * the target or not logging in at all
 -	 */
@@ -1134,7 +1141,8 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
 -		session->bidirectional_auth = 0;
 -	}
 +	/* setup authentication variables for the session*/
-+	if (iscsi_setup_authentication(session, &config->auth))
++	*rc = iscsi_setup_authentication(session, &config->auth);
++	if (*rc)
 +		goto fail;
  
 -	/* copy in whatever credentials we have */
@@ -1192,7 +1200,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  }
  
  static int
-@@ -1018,7 +871,6 @@ process_recvd_pdu(struct iscsi_hdr *pdu,
+@@ -1018,7 +878,6 @@ process_recvd_pdu(struct iscsi_hdr *pdu,
  		  struct list_head *rec_list,
  		  iscsi_session_t *session,
  		  struct str_buffer *sendtargets,
@@ -1200,7 +1208,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  		  int *active,
  		  int *valid_text,
  		  char *data)
-@@ -1063,8 +915,7 @@ process_recvd_pdu(struct iscsi_hdr *pdu,
+@@ -1063,8 +922,7 @@ process_recvd_pdu(struct iscsi_hdr *pdu,
  			process_sendtargets_response(sendtargets,
  						     final,
  						     drec,
@@ -1210,7 +1218,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  
  			if (final) {
  				/* SendTargets exchange is now complete
-@@ -1096,11 +947,9 @@ process_recvd_pdu(struct iscsi_hdr *pdu,
+@@ -1096,11 +954,9 @@ process_recvd_pdu(struct iscsi_hdr *pdu,
  }
  
  /*
@@ -1224,7 +1232,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  {
  	struct iscsi_logout logout_req;
  	struct iscsi_logout_rsp logout_resp;
-@@ -1128,7 +977,7 @@ iscsi_logout_and_disconnect(iscsi_sessio
+@@ -1128,7 +984,7 @@ iscsi_logout_and_disconnect(iscsi_sessio
  	if (!rc) {
  		log_error(
  		       "iscsid: iscsi_logout - failed to send logout PDU.");
@@ -1233,7 +1241,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  	}
  
  	/*
-@@ -1138,117 +987,278 @@ iscsi_logout_and_disconnect(iscsi_sessio
+@@ -1138,117 +994,278 @@ iscsi_logout_and_disconnect(iscsi_sessio
  	rc = iscsi_io_recv_pdu(&session->conn[0],
  		(struct iscsi_hdr *)&logout_resp, ISCSI_DIGEST_NONE, NULL,
  		0, ISCSI_DIGEST_NONE, 1);
@@ -1248,7 +1256,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  		       logout_resp.response);
  	}
 +}
-+
+ 
 +static void iscsi_destroy_session(struct iscsi_session *session)
 +{
 +	struct iscsi_transport *t = session->t;
@@ -1282,7 +1290,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
 +			  session->id, conn->id, rc);
 +		goto done;
 +	}
- 
++
 +	log_debug(2, "%s destroy session", __FUNCTION__);
 +	rc = ipc->destroy_session(session->t->handle, session->id);
 +	if (rc)
@@ -1583,7 +1591,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  	/* slowly back off the frequency of login attempts */
  	if (login_failures == 0)
  		login_delay = 0;
-@@ -1263,47 +1273,44 @@ redirect_reconnect:
+@@ -1263,47 +1280,44 @@ redirect_reconnect:
  	else
  		login_delay = 60;	/* after 2 minutes, try once a minute */
  
@@ -1654,7 +1662,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  	case LOGIN_OK:
  	case LOGIN_REDIRECT:
  		break;
-@@ -1311,8 +1318,7 @@ redirect_reconnect:
+@@ -1311,8 +1325,7 @@ redirect_reconnect:
  	case LOGIN_IO_ERROR:
  	case LOGIN_REDIRECTION_FAILED:
  		/* try again */
@@ -1664,7 +1672,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  		login_failures++;
  		goto set_address;
  
-@@ -1322,16 +1328,16 @@ redirect_reconnect:
+@@ -1322,16 +1335,16 @@ redirect_reconnect:
  	case LOGIN_AUTHENTICATION_FAILED:
  	case LOGIN_VERSION_MISMATCH:
  	case LOGIN_INVALID_PDU:
@@ -1686,7 +1694,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  		login_failures = 0;
  		break;
  	case ISCSI_STATUS_CLS_REDIRECT:
-@@ -1343,14 +1349,16 @@ redirect_reconnect:
+@@ -1343,14 +1356,16 @@ redirect_reconnect:
  		case ISCSI_LOGIN_STATUS_TGT_MOVED_TEMP:
  			log_warning(
  				"discovery login temporarily redirected to "
@@ -1706,7 +1714,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  			goto redirect_reconnect;
  		default:
  			log_error(
-@@ -1361,32 +1369,134 @@ redirect_reconnect:
+@@ -1361,32 +1376,130 @@ redirect_reconnect:
  		}
  		break;
  	case ISCSI_STATUS_CLS_INITIATOR_ERR:
@@ -1792,7 +1800,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
 +	int active = 0, valid_text = 0;
 +	struct timeval connection_timer;
 +	int timeout;
-+	int rc;
++	int rc = 0;
 +	struct str_buffer sendtargets;
 +	unsigned int data_len;
 +	struct iscsi_sendtargets_config *config = &drec->u.sendtargets;
@@ -1804,13 +1812,9 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
 +	iscsi_timer_clear(&connection_timer);
 +
 +	/* allocate a new session, and initialize default values */
-+	session = iscsi_alloc_session(config, iface);
-+	if (session == NULL) {
-+		log_error("Discovery process to %s:%d failed to "
-+			  "create a discovery session.",
-+			  drec->address, drec->port);
-+		return ISCSI_ERR_NOMEM;
-+	}
++	session = iscsi_alloc_session(config, iface, &rc);
++	if (rc)
++		return rc;
 +
 +	ipc_ev_context.conn = &session->conn[0];
 +	ipc_register_ev_callback(&ipc_clbk);
@@ -1852,7 +1856,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  	/* reinitialize */
  	str_truncate_buffer(&sendtargets, 0);
  
-@@ -1397,7 +1507,7 @@ redirect_reconnect:
+@@ -1397,7 +1510,7 @@ redirect_reconnect:
  	active = 1;
  
  	/* set timeouts */
@@ -1861,7 +1865,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  
  	/* prepare to poll */
  	memset(&pfd, 0, sizeof (pfd));
-@@ -1405,7 +1515,7 @@ redirect_reconnect:
+@@ -1405,7 +1518,7 @@ redirect_reconnect:
  	pfd.events = POLLIN | POLLPRI;
  
  repoll:
@@ -1870,7 +1874,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  	/* block until we receive a PDU, a TCP FIN, a TCP RST,
  	 * or a timeout
  	 */
-@@ -1422,31 +1532,30 @@ repoll:
+@@ -1422,31 +1535,30 @@ repoll:
  		 "discovery process to %s:%d returned from poll, rc %d",
  		 drec->address, drec->port, rc);
  
@@ -1915,7 +1919,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  				goto free_sendtargets;
  			}
  
-@@ -1455,14 +1564,13 @@ repoll:
+@@ -1455,14 +1567,13 @@ repoll:
  			 */
  			rc = process_recvd_pdu(pdu, drec, rec_list,
  					       session, &sendtargets,
@@ -1931,7 +1935,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  				       session->conn[0].active_timeout);
  				goto repoll;
  			}
-@@ -1472,8 +1580,7 @@ repoll:
+@@ -1472,8 +1583,7 @@ repoll:
  			log_warning("discovery session to %s:%d "
  				    "terminating after hangup",
  				     drec->address, drec->port);
@@ -1941,7 +1945,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  			goto free_sendtargets;
  		}
  
-@@ -1489,18 +1596,9 @@ repoll:
+@@ -1489,18 +1599,9 @@ repoll:
  			goto reconnect;
  		}
  	} else if (rc < 0) {
@@ -1963,7 +1967,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  	}
  
  	log_debug(1, "discovery process to %s:%d exiting",
-@@ -1510,8 +1608,9 @@ repoll:
+@@ -1510,8 +1611,9 @@ repoll:
  free_sendtargets:
  	str_free_buffer(&sendtargets);
  	free(data);
@@ -1976,7 +1980,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discovery.c open-iscsi-2.0-872-rc4-
  
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discoveryd.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/discoveryd.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/discoveryd.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/discoveryd.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/discoveryd.c	2011-02-03 20:14:23.000000000 -0600
 @@ -44,6 +44,7 @@
  #include "isns.h"
  #include "paths.h"
@@ -2222,7 +2226,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/discoveryd.c open-iscsi-2.0-872-rc4
  	return 0;
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/event_poll.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/event_poll.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/event_poll.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/event_poll.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/event_poll.c	2011-02-03 20:14:23.000000000 -0600
 @@ -35,6 +35,7 @@
  #include "iscsi_ipc.h"
  #include "actor.h"
@@ -2240,7 +2244,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/event_poll.c open-iscsi-2.0-872-rc4
  }
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/host.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/host.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/host.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/host.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/host.c	2011-02-03 20:14:23.000000000 -0600
 @@ -33,6 +33,7 @@
  #include "transport.h"
  #include "initiator.h"
@@ -2271,7 +2275,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/host.c open-iscsi-2.0-872-rc4-bnx2i
  }
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/idbm.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/idbm.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/idbm.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/idbm.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/idbm.c	2011-02-03 20:14:23.000000000 -0600
 @@ -40,6 +40,7 @@
  #include "iface.h"
  #include "sysdeps.h"
@@ -2970,7 +2974,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/idbm.c open-iscsi-2.0-872-rc4-bnx2i
  	iface_setup_defaults(&rec->iface);
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/idbm.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/idbm.h
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/idbm.h	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/idbm.h	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/idbm.h	2011-02-03 20:14:23.000000000 -0600
 @@ -93,9 +93,6 @@ struct rec_op_data {
  	node_rec_t *match_rec;
  	idbm_iface_op_fn *fn;
@@ -2983,7 +2987,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/idbm.h open-iscsi-2.0-872-rc4-bnx2i
  extern int idbm_for_each_node(int *found, void *data,
 diff -Naurp 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	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iface.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iface.c	2011-02-03 20:14:23.000000000 -0600
 @@ -39,6 +39,7 @@
  #include "host.h"
  #include "fw_context.h"
@@ -3142,7 +3146,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iface.c open-iscsi-2.0-872-rc4-bnx2
  	INIT_LIST_HEAD(&iface_copy->list);
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/initiator.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/initiator.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/initiator.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/initiator.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/initiator.c	2011-02-03 20:14:23.000000000 -0600
 @@ -46,6 +46,7 @@
  #include "iscsi_settings.h"
  #include "iface.h"
@@ -4701,7 +4705,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/initiator.c open-iscsi-2.0-872-rc4-
 +}
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/initiator_common.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/initiator_common.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/initiator_common.c	1969-12-31 18:00:00.000000000 -0600
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/initiator_common.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/initiator_common.c	2011-02-03 20:14:23.000000000 -0600
 @@ -0,0 +1,601 @@
 +/*
 + * Common code for setting up discovery and normal sessions.
@@ -5306,7 +5310,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/initiator_common.c open-iscsi-2.0-8
 +}
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/initiator.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/initiator.h
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/initiator.h	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/initiator.h	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/initiator.h	2011-02-03 20:14:23.000000000 -0600
 @@ -67,6 +67,7 @@ typedef enum conn_login_status_e {
  	CONN_LOGIN_RETRY		= 3,
  	CONN_LOGIN_IMM_RETRY		= 4,
@@ -5418,7 +5422,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/initiator.h open-iscsi-2.0-872-rc4-
  #endif /* INITIATOR_H */
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/io.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/io.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/io.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/io.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/io.c	2011-02-03 20:14:23.000000000 -0600
 @@ -401,7 +401,6 @@ iscsi_io_connect(iscsi_conn_t *conn)
  	int rc, ret;
  	struct sigaction action;
@@ -5623,7 +5627,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/io.c open-iscsi-2.0-872-rc4-bnx2i.w
  	return h_bytes + ahs_bytes + d_bytes;
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsiadm.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsiadm.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsiadm.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsiadm.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsiadm.c	2011-02-03 20:14:23.000000000 -0600
 @@ -48,10 +48,11 @@
  #include "session_mgmt.h"
  #include "iscsid_req.h"
@@ -6742,7 +6746,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsiadm.c open-iscsi-2.0-872-rc4-b
  
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid.c	2011-02-03 20:14:23.000000000 -0600
 @@ -31,6 +31,8 @@
  #include <sys/utsname.h>
  #include <sys/types.h>
@@ -6910,7 +6914,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid.c open-iscsi-2.0-872-rc4-bnx
  	actor_init();
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid.h
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid.h	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid.h	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid.h	2011-02-03 20:14:23.000000000 -0600
 @@ -31,6 +31,5 @@ struct iscsi_daemon_config {
  	char *initiator_alias;
  };
@@ -6920,7 +6924,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid.h open-iscsi-2.0-872-rc4-bnx
  #endif	/* ISCSID_H */
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid_req.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid_req.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid_req.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid_req.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid_req.c	2011-02-03 20:14:23.000000000 -0600
 @@ -31,6 +31,7 @@
  #include "mgmt_ipc.h"
  #include "iscsi_util.h"
@@ -7045,7 +7049,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid_req.c open-iscsi-2.0-872-rc4
 -}
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid_req.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid_req.h
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid_req.h	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid_req.h	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsid_req.h	2011-02-03 20:14:23.000000000 -0600
 @@ -27,7 +27,6 @@ struct node_rec;
  
  extern int iscsid_exec_req(struct iscsiadm_req *req, struct iscsiadm_rsp *rsp,
@@ -7056,7 +7060,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsid_req.h open-iscsi-2.0-872-rc4
  extern int iscsid_req_by_rec(int cmd, struct node_rec *rec);
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_err.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_err.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_err.c	1969-12-31 18:00:00.000000000 -0600
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_err.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_err.c	2011-02-03 20:14:23.000000000 -0600
 @@ -0,0 +1,72 @@
 +/*
 + * iSCSI error helpers
@@ -7132,7 +7136,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_err.c open-iscsi-2.0-872-rc4-
 +}
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_ipc.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_ipc.h
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_ipc.h	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_ipc.h	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_ipc.h	2011-02-03 20:14:23.000000000 -0600
 @@ -34,6 +34,26 @@ enum {
  };
  
@@ -7162,7 +7166,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_ipc.h open-iscsi-2.0-872-rc4-
   * struct iscsi_ipc - Open-iSCSI Interface for Kernel IPC
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_net_util.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_net_util.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_net_util.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_net_util.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_net_util.c	2011-02-03 20:14:23.000000000 -0600
 @@ -41,6 +41,7 @@ struct iscsi_net_driver {
  static struct iscsi_net_driver net_drivers[] = {
  #ifdef OFFLOAD_BOOT_SUPPORTED
@@ -7173,7 +7177,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_net_util.c open-iscsi-2.0-872
  #endif
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsistart.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsistart.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsistart.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsistart.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsistart.c	2011-02-03 20:14:23.000000000 -0600
 @@ -47,6 +47,7 @@
  #include "iface.h"
  #include "sysdeps.h"
@@ -7338,7 +7342,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsistart.c open-iscsi-2.0-872-rc4
  	ipc->ctldev_close();
 diff -Naurp 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	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_sysfs.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_sysfs.c	2011-02-03 20:14:23.000000000 -0600
 @@ -36,6 +36,7 @@
  #include "iface.h"
  #include "session_info.h"
@@ -7608,7 +7612,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_sysfs.c open-iscsi-2.0-872-rc
  	snprintf(path_full, sizeof(path_full), "%s%s/device/target%d:0:%d",
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_timer.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_timer.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_timer.c	1969-12-31 18:00:00.000000000 -0600
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_timer.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_timer.c	2011-02-03 20:14:23.000000000 -0600
 @@ -0,0 +1,86 @@
 +/*
 + * iSCSI timer
@@ -7698,7 +7702,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_timer.c open-iscsi-2.0-872-rc
 +}
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_timer.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_timer.h
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_timer.h	1969-12-31 18:00:00.000000000 -0600
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_timer.h	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_timer.h	2011-02-03 20:14:23.000000000 -0600
 @@ -0,0 +1,28 @@
 +/*
 + * iSCSI timer
@@ -7730,7 +7734,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_timer.h open-iscsi-2.0-872-rc
 +#endif
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/login.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/login.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/login.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/login.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/login.c	2011-02-03 20:14:23.000000000 -0600
 @@ -27,11 +27,14 @@
  #include <stdio.h>
  #include <stdlib.h>
@@ -7865,7 +7869,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/login.c open-iscsi-2.0-872-rc4-bnx2
  	c->ret = LOGIN_OK;
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/Makefile open-iscsi-2.0-872-rc4-bnx2i.work/usr/Makefile
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/Makefile	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/Makefile	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/Makefile	2011-02-03 20:14:23.000000000 -0600
 @@ -37,12 +37,13 @@ PROGRAMS = iscsid iscsiadm iscsistart
  # libc compat files
  SYSDEPS_SRCS = $(wildcard ../utils/sysdeps/*.o)
@@ -7904,7 +7908,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/Makefile open-iscsi-2.0-872-rc4-bnx
  clean:
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/mgmt_ipc.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/mgmt_ipc.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/mgmt_ipc.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/mgmt_ipc.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/mgmt_ipc.c	2011-02-03 20:14:23.000000000 -0600
 @@ -35,6 +35,7 @@
  #include "transport.h"
  #include "sysdeps.h"
@@ -8205,7 +8209,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/mgmt_ipc.c open-iscsi-2.0-872-rc4-b
  err:
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/mgmt_ipc.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/mgmt_ipc.h
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/mgmt_ipc.h	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/mgmt_ipc.h	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/mgmt_ipc.h	2011-02-03 20:14:23.000000000 -0600
 @@ -26,30 +26,6 @@
  #define ISCSIADM_NAMESPACE	"ISCSIADM_ABSTRACT_NAMESPACE"
  #define PEERUSER_MAX		64
@@ -8277,7 +8281,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/mgmt_ipc.h open-iscsi-2.0-872-rc4-b
  void mgmt_ipc_handle(int accept_fd);
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/netlink.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/netlink.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/netlink.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/netlink.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/netlink.c	2011-02-03 20:14:23.000000000 -0600
 @@ -33,7 +33,6 @@
  
  #include "types.h"
@@ -8509,7 +8513,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/netlink.c open-iscsi-2.0-872-rc4-bn
 +}
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/session_info.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/session_info.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/session_info.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/session_info.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/session_info.c	2011-02-03 20:14:23.000000000 -0600
 @@ -13,6 +13,7 @@
  #include "initiator.h"
  #include "iface.h"
@@ -8547,7 +8551,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/session_info.c open-iscsi-2.0-872-r
  }
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/session_mgmt.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/session_mgmt.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/session_mgmt.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/session_mgmt.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/session_mgmt.c	2011-02-03 20:14:23.000000000 -0600
 @@ -32,6 +32,7 @@
  #include "iscsi_sysfs.h"
  #include "log.h"
@@ -8663,7 +8667,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/session_mgmt.c open-iscsi-2.0-872-r
  }
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/transport.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/transport.c
 --- open-iscsi-2.0-872-rc4-bnx2i/usr/transport.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/transport.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/transport.c	2011-02-03 20:14:23.000000000 -0600
 @@ -25,7 +25,7 @@
  #include "log.h"
  #include "iscsi_util.h"
@@ -8710,7 +8714,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/transport.c open-iscsi-2.0-872-rc4-
  }
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/utils/fwparam_ibft/fw_entry.c open-iscsi-2.0-872-rc4-bnx2i.work/utils/fwparam_ibft/fw_entry.c
 --- open-iscsi-2.0-872-rc4-bnx2i/utils/fwparam_ibft/fw_entry.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/utils/fwparam_ibft/fw_entry.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/utils/fwparam_ibft/fw_entry.c	2011-02-03 20:14:23.000000000 -0600
 @@ -34,6 +34,7 @@
  #include "fwparam.h"
  #include "idbm_fields.h"
@@ -8742,7 +8746,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/utils/fwparam_ibft/fw_entry.c open-iscs
  /**
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/utils/fwparam_ibft/fwparam_ppc.c open-iscsi-2.0-872-rc4-bnx2i.work/utils/fwparam_ibft/fwparam_ppc.c
 --- open-iscsi-2.0-872-rc4-bnx2i/utils/fwparam_ibft/fwparam_ppc.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/utils/fwparam_ibft/fwparam_ppc.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/utils/fwparam_ibft/fwparam_ppc.c	2011-02-03 20:14:23.000000000 -0600
 @@ -30,6 +30,7 @@
  #include "iscsi_obp.h"
  #include "prom_parse.h"
@@ -8837,7 +8841,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/utils/fwparam_ibft/fwparam_ppc.c open-i
  				list_add_tail(&context->list, list);
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/utils/fwparam_ibft/fwparam_sysfs.c open-iscsi-2.0-872-rc4-bnx2i.work/utils/fwparam_ibft/fwparam_sysfs.c
 --- open-iscsi-2.0-872-rc4-bnx2i/utils/fwparam_ibft/fwparam_sysfs.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/utils/fwparam_ibft/fwparam_sysfs.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/utils/fwparam_ibft/fwparam_sysfs.c	2011-02-03 20:14:23.000000000 -0600
 @@ -36,6 +36,7 @@
  #include "fwparam.h"
  #include "sysdeps.h"
@@ -8949,7 +8953,7 @@ diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/utils/fwparam_ibft/fwparam_sysfs.c open
  	return rc;
 diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/utils/open-isns/socket.c open-iscsi-2.0-872-rc4-bnx2i.work/utils/open-isns/socket.c
 --- open-iscsi-2.0-872-rc4-bnx2i/utils/open-isns/socket.c	2010-07-11 04:05:58.000000000 -0500
-+++ open-iscsi-2.0-872-rc4-bnx2i.work/utils/open-isns/socket.c	2011-01-31 02:26:39.000000000 -0600
++++ open-iscsi-2.0-872-rc4-bnx2i.work/utils/open-isns/socket.c	2011-02-03 20:14:23.000000000 -0600
 @@ -805,7 +805,7 @@ isns_net_stream_xmit(isns_socket_t *sock
  void
  isns_net_stream_hup(isns_socket_t *sock)
diff --git a/iscsi-initiator-utils.spec b/iscsi-initiator-utils.spec
index 0f3fca1..ad6fa89 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: 14%{?dist}
+Release: 15%{?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
@@ -11,7 +11,7 @@ Source3: 04-iscsi
 
 # sync brcm to 0.6.2.13
 Patch0: iscsi-initiator-utils-sync-brcm-0.6.2.13.patch
-# sync iscsi tools to upstream commit cc425fd44b24d9fda74395951570460fc919d076
+# sync iscsi tools to upstream commit 2e281f047571e9fb99b9b0b11ff479a487a8e6b1 
 Patch1: iscsi-initiator-utils-sync-iscsi.patch
 # Add Red Hat specific info to docs.
 Patch2: iscsi-initiator-utils-update-initscripts-and-docs.patch
@@ -39,12 +39,14 @@ Patch12: iscsi-initiator-utils-brcm-man.patch
 Patch13: iscsi-initiator-utils-disable-dsa-code.patch
 # support hostnames in node mode
 Patch14: iscsi-initiator-utils-node-mode-hostname.patch
+# DCB iscsi support
+Patch15: iscsi-initiator-utils-dcb.patch
 
 Group: System Environment/Daemons
 License: GPLv2+
 URL: http://www.open-iscsi.org
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-BuildRequires: openssl-devel flex bison python-devel doxygen
+BuildRequires: openssl-devel flex bison python-devel doxygen kernel-headers
 
 Requires(post): chkconfig
 Requires(preun): chkconfig /sbin/service
@@ -81,6 +83,7 @@ developing applications that use %{name}.
 %patch12 -p1 -b .brcm-man
 %patch13 -p1 -b .disable-dsa-code
 %patch14 -p1 -b .node-mode-hostname
+%patch15 -p1 -b .dcb
 
 %build
 cd utils/open-isns
@@ -199,7 +202,11 @@ fi
 %{_includedir}/libiscsi.h
 
 %changelog
-* Mon Jan 31 2011 Mike Christie <akozumpl at redhat.com> 6.2.0.872.14
+* Thu Feb 3 2011 Mike Christie <mcrhsit at redhat.com> 6.2.0.872.15
+- 640340 fix iscsiadm exit codes.
+- 523492 iSCSI DCB support
+
+* Mon Jan 31 2011 Mike Christie <mchristi at redhat.com> 6.2.0.872.14
 - 593269 iscsi was built against libcrypto, but was not using the code
 so this disabled the building of that code.
 - 599539 document brcm_iscsiuio options in man page.


More information about the scm-commits mailing list