From d94dff1ce0d2e4bd4bf91c2e443fabe9776ffe14 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Mar 05 2015 13:26:10 +0000 Subject: import iscsi-initiator-utils-6.2.0.873-29.el7 --- diff --git a/SOURCES/0071-iscsiadm-Fix-the-hostno-check-for-stats-submode-of-h.patch b/SOURCES/0071-iscsiadm-Fix-the-hostno-check-for-stats-submode-of-h.patch new file mode 100644 index 0000000..6d588cd --- /dev/null +++ b/SOURCES/0071-iscsiadm-Fix-the-hostno-check-for-stats-submode-of-h.patch @@ -0,0 +1,30 @@ +From f2ecc22d3cb0473b117a33e048a5a56cd8e9e46d Mon Sep 17 00:00:00 2001 +From: Chris Leech +Date: Mon, 24 Feb 2014 03:14:17 -0500 +Subject: [PATCH] iscsiadm: Fix the hostno check for stats submode of host mode + +This fixes the condition where hostno value of 0 was being treated +as invalid. + +Signed-off-by: Chris Leech +Signed-off-by: Adheer Chandravanshi +--- + usr/iscsiadm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c +index 3cde8d1..36617ab 100644 +--- a/usr/iscsiadm.c ++++ b/usr/iscsiadm.c +@@ -3470,7 +3470,7 @@ main(int argc, char **argv) + ¶ms); + break; + case MODE_HOST_STATS: +- if (!host_no) { ++ if (host_no > MAX_HOST_NO) { + log_error("STATS mode requires host no"); + rc = ISCSI_ERR_INVAL; + break; +-- +1.9.3 + diff --git a/SOURCES/0072-iscsiadm-Fix-the-compile-time-warning.patch b/SOURCES/0072-iscsiadm-Fix-the-compile-time-warning.patch new file mode 100644 index 0000000..3d54151 --- /dev/null +++ b/SOURCES/0072-iscsiadm-Fix-the-compile-time-warning.patch @@ -0,0 +1,31 @@ +From b1526306e413f0874d608637cd2a9f6571ea4d32 Mon Sep 17 00:00:00 2001 +From: Adheer Chandravanshi +Date: Mon, 24 Feb 2014 03:14:18 -0500 +Subject: [PATCH] iscsiadm: Fix the compile time warning + +This fixes the following compile time warning message: + +iscsiadm.c:2248: warning: passing argument 1 of 'print_host_stats' from incompatible pointer type + +Signed-off-by: Adheer Chandravanshi +--- + usr/iscsiadm.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c +index 36617ab..389f4b8 100644 +--- a/usr/iscsiadm.c ++++ b/usr/iscsiadm.c +@@ -2245,7 +2245,8 @@ static int exec_host_stats_op(int op, int info_level, uint32_t host_no) + goto exit_host_stats; + } + +- print_host_stats(req_buf + sizeof(struct iscsi_uevent)); ++ print_host_stats((struct iscsi_offload_host_stats *)(req_buf + ++ sizeof(struct iscsi_uevent))); + + ipc->ctldev_close(); + +-- +1.9.3 + diff --git a/SOURCES/0074-iscsid-Fix-handling-of-iscsi-async-events.patch b/SOURCES/0074-iscsid-Fix-handling-of-iscsi-async-events.patch new file mode 100644 index 0000000..b9a27d1 --- /dev/null +++ b/SOURCES/0074-iscsid-Fix-handling-of-iscsi-async-events.patch @@ -0,0 +1,56 @@ +From 36a8b41de43749d91dfd52f9c8ad4a454c9a8f15 Mon Sep 17 00:00:00 2001 +From: Mike Christie +Date: Fri, 14 Mar 2014 01:41:29 -0500 +Subject: [PATCH] iscsid: Fix handling of iscsi async events. + +When iscsi targets send 32 or more iscsi async event pdus the +initiator will run out of memory for events and this message: + +BUG: iscsid: Can not allocate memory for receive context. + +will be logged non stop. iscsid will then not be able to +complate any more requests because it is stuck in a endless loop +printing that message. + +This fixes the problem by having iscsid handle an event after it +has read it in from netlink or the mgmt ipc. Previously we would +queue all events then handle them. +--- + usr/event_poll.c | 5 ++++- + usr/netlink.c | 2 +- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/usr/event_poll.c b/usr/event_poll.c +index f36fec1..939f1a2 100644 +--- a/usr/event_poll.c ++++ b/usr/event_poll.c +@@ -165,8 +165,11 @@ void event_loop(struct iscsi_ipc *ipc, int control_fd, int mgmt_ipc_fd) + "exiting", res, errno); + break; + } +- } else ++ } ++ ++ if (res >= 0) + actor_poll(); ++ + reap_proc(); + /* + * flush sysfs cache since kernel objs may +diff --git a/usr/netlink.c b/usr/netlink.c +index 1c4b5cc..532d9ef 100644 +--- a/usr/netlink.c ++++ b/usr/netlink.c +@@ -1615,8 +1615,8 @@ static int ctldev_handle(void) + + ev_context = ipc_ev_clbk->get_ev_context(conn, ev_size); + if (!ev_context) { +- /* retry later */ + log_error("Can not allocate memory for receive context."); ++ drop_data(nlh); + return -ENOMEM; + } + +-- +1.9.3 + diff --git a/SOURCES/0075-be2iscsi-Fix-MaxXmitDataLenght-of-the-driver.patch b/SOURCES/0075-be2iscsi-Fix-MaxXmitDataLenght-of-the-driver.patch new file mode 100644 index 0000000..2666f57 --- /dev/null +++ b/SOURCES/0075-be2iscsi-Fix-MaxXmitDataLenght-of-the-driver.patch @@ -0,0 +1,41 @@ +From 5f28b8b73fbdb8c1e7fbe4a0e40dd2857b74b685 Mon Sep 17 00:00:00 2001 +From: John Soni Jose +Date: Fri, 21 Mar 2014 11:51:09 +0530 +Subject: [PATCH] be2iscsi: Fix MaxXmitDataLenght of the driver. + + Issue : + During login negotiation if the MaxRecvDataSegmenLen given by the + target is 0, then MRDSL default value of 8K should be considered. + Some old targets close the CXN if the PDU received size is greater + than the MaxRecvDataSegmentLen set during negotiation. + + Fix : + When target is not sending MaxRecvDataSegmentLen in the negotiated + params the value is 0. be2iscsi was setting max_xmit_dlength to 64k + in this case. This fix sets the MaxRecvDataSegmentLen=8k if during + negotiation the MaxRecvDataSegmentLen=0 + +Signed-off-by: John Soni Jose +Signed-off-by: Jayamohan Kallickal +--- + usr/be2iscsi.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/usr/be2iscsi.c b/usr/be2iscsi.c +index ce8b719..ba4c29f 100644 +--- a/usr/be2iscsi.c ++++ b/usr/be2iscsi.c +@@ -33,10 +33,6 @@ void be2iscsi_create_conn(struct iscsi_conn *conn) + if (conn->max_xmit_dlength > 65536) + conn->max_xmit_dlength = 65536; + +- if (!conn_rec->iscsi.MaxXmitDataSegmentLength || +- conn_rec->iscsi.MaxXmitDataSegmentLength > 65536) +- conn_rec->iscsi.MaxXmitDataSegmentLength = 65536; +- + session->erl = 0; + session->initial_r2t_en = 1; + } +-- +1.9.3 + diff --git a/SOURCES/0076-Fix-StatSN-in-Open-iSCSI-Stack.patch b/SOURCES/0076-Fix-StatSN-in-Open-iSCSI-Stack.patch new file mode 100644 index 0000000..0f623fd --- /dev/null +++ b/SOURCES/0076-Fix-StatSN-in-Open-iSCSI-Stack.patch @@ -0,0 +1,61 @@ +From e696b94743d880c30c6e4e39c753e4d652845e85 Mon Sep 17 00:00:00 2001 +From: John Soni Jose +Date: Fri, 21 Mar 2014 11:51:19 +0530 +Subject: [PATCH] Fix StatSN in Open-iSCSI Stack. + + When LIO target is used, STATSN in login response can be in + the range 0x0 - 0xFFFFFFFF. Open-iSCSI Stack had the type + as ISCSI_INT for StatSN, so StatSN used to get reset to 0. + + Adding new type ISCSI_UINT feild to fix this issue. + +Signed-off-by: John Soni Jose +Signed-off-by: Jayamohan Kallickal +--- + usr/initiator_common.c | 2 +- + usr/iscsi_ipc.h | 1 + + usr/netlink.c | 3 +++ + 3 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/usr/initiator_common.c b/usr/initiator_common.c +index 109e8d7..50f8d41 100644 +--- a/usr/initiator_common.c ++++ b/usr/initiator_common.c +@@ -431,7 +431,7 @@ int iscsi_session_set_neg_params(struct iscsi_conn *conn) + }, { + .param = ISCSI_PARAM_EXP_STATSN, + .value = &conn->exp_statsn, +- .type = ISCSI_INT, ++ .type = ISCSI_UINT, + .conn_only = 1, + }, { + .param = ISCSI_PARAM_TPGT, +diff --git a/usr/iscsi_ipc.h b/usr/iscsi_ipc.h +index 9d26d54..5087b5c 100644 +--- a/usr/iscsi_ipc.h ++++ b/usr/iscsi_ipc.h +@@ -30,6 +30,7 @@ + + enum { + ISCSI_INT, ++ ISCSI_UINT, + ISCSI_STRING, + }; + +diff --git a/usr/netlink.c b/usr/netlink.c +index 532d9ef..b0dfb03 100644 +--- a/usr/netlink.c ++++ b/usr/netlink.c +@@ -716,6 +716,9 @@ kset_param(uint64_t transport_handle, uint32_t sid, uint32_t cid, + case ISCSI_INT: + sprintf(param_str, "%d", *((int *)value)); + break; ++ case ISCSI_UINT: ++ sprintf(param_str, "%u", *((unsigned int *)value)); ++ break; + case ISCSI_STRING: + if (!strlen(value)) + return 0; +-- +1.9.3 + diff --git a/SOURCES/0077-iscsid-retry-login-for-ISCSI_ERR_HOST_NOT_FOUND.patch b/SOURCES/0077-iscsid-retry-login-for-ISCSI_ERR_HOST_NOT_FOUND.patch new file mode 100644 index 0000000..67d4dd2 --- /dev/null +++ b/SOURCES/0077-iscsid-retry-login-for-ISCSI_ERR_HOST_NOT_FOUND.patch @@ -0,0 +1,207 @@ +From c0e509e7535372cd5d655bc5a20d3d2bae45df84 Mon Sep 17 00:00:00 2001 +From: Mike Christie +Date: Wed, 7 May 2014 14:38:13 -0500 +Subject: [PATCH] iscsid: retry login for ISCSI_ERR_HOST_NOT_FOUND + +If a driver is being loaded then the scsi_host might not yet +be added. This has iscsid retry login if the host is not yet +in sysfs. +--- + usr/initiator.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 100 insertions(+), 11 deletions(-) + +diff --git a/usr/initiator.c b/usr/initiator.c +index 05a5b19..b4b8957 100644 +--- a/usr/initiator.c ++++ b/usr/initiator.c +@@ -55,10 +55,19 @@ + + #define PROC_DIR "/proc" + ++struct login_task_retry_info { ++ actor_t retry_actor; ++ queue_task_t *qtask; ++ node_rec_t *rec; ++ int retry_count; ++}; ++ + static void iscsi_login_timedout(void *data); + static int iscsi_sched_ev_context(struct iscsi_ev_context *ev_context, + struct iscsi_conn *conn, unsigned long tmo, + int event); ++static int queue_session_login_task_retry(struct login_task_retry_info *info, ++ node_rec_t *rec, queue_task_t *qtask); + + static int iscsi_ev_context_alloc(iscsi_conn_t *conn) + { +@@ -324,14 +333,17 @@ session_release(iscsi_session_t *session) + } + + static iscsi_session_t* +-__session_create(node_rec_t *rec, struct iscsi_transport *t) ++__session_create(node_rec_t *rec, struct iscsi_transport *t, int *rc) + { + iscsi_session_t *session; +- int hostno, rc = 0; ++ int hostno; ++ ++ *rc = 0; + + session = calloc(1, sizeof (*session)); + if (session == NULL) { + log_debug(1, "can not allocate memory for session"); ++ *rc = ISCSI_ERR_NOMEM; + return NULL; + } + log_debug(2, "Allocted session %p", session); +@@ -356,8 +368,8 @@ __session_create(node_rec_t *rec, struct iscsi_transport *t) + session->initiator_name = dconfig->initiator_name; + else { + log_error("No initiator name set. Cannot create session."); +- free(session); +- return NULL; ++ *rc = ISCSI_ERR_INVAL; ++ goto free_session; + } + + if (strlen(session->nrec.iface.alias)) +@@ -386,8 +398,8 @@ __session_create(node_rec_t *rec, struct iscsi_transport *t) + + iscsi_session_init_params(session); + +- hostno = iscsi_sysfs_get_host_no_from_hwinfo(&rec->iface, &rc); +- if (!rc) { ++ hostno = iscsi_sysfs_get_host_no_from_hwinfo(&rec->iface, rc); ++ if (!*rc) { + /* + * if the netdev or mac was set, then we are going to want + * to want to bind the all the conns/eps to a specific host +@@ -395,10 +407,18 @@ __session_create(node_rec_t *rec, struct iscsi_transport *t) + */ + session->conn[0].bind_ep = 1; + session->hostno = hostno; ++ } else if (*rc == ISCSI_ERR_HOST_NOT_FOUND) { ++ goto free_session; ++ } else { ++ *rc = 0; + } + + list_add_tail(&session->list, &t->sessions); + return session; ++ ++free_session: ++ free(session); ++ return NULL; + } + + static void iscsi_flush_context_pool(struct iscsi_session *session) +@@ -1862,8 +1882,7 @@ static int session_is_running(node_rec_t *rec) + return 0; + } + +-int +-session_login_task(node_rec_t *rec, queue_task_t *qtask) ++static int __session_login_task(node_rec_t *rec, queue_task_t *qtask) + { + iscsi_session_t *session; + iscsi_conn_t *conn; +@@ -1930,8 +1949,10 @@ session_login_task(node_rec_t *rec, queue_task_t *qtask) + rec->conn[0].iscsi.OFMarker = 0; + } + +- session = __session_create(rec, t); +- if (!session) ++ session = __session_create(rec, t, &rc); ++ if (rc == ISCSI_ERR_HOST_NOT_FOUND) ++ return rc; ++ else if (!session) + return ISCSI_ERR_LOGIN; + + /* FIXME: login all connections! marked as "automatic" */ +@@ -1979,6 +2000,74 @@ session_login_task(node_rec_t *rec, queue_task_t *qtask) + return ISCSI_SUCCESS; + } + ++int ++session_login_task(node_rec_t *rec, queue_task_t *qtask) ++{ ++ int rc; ++ ++ rc = __session_login_task(rec, qtask); ++ if (rc == ISCSI_ERR_HOST_NOT_FOUND) { ++ rc = queue_session_login_task_retry(NULL, rec, qtask); ++ if (rc) ++ return rc; ++ /* ++ * we are going to internally retry. Will return final rc ++ * when completed ++ */ ++ return ISCSI_SUCCESS; ++ } ++ return rc; ++} ++ ++static void session_login_task_retry(void *data) ++{ ++ struct login_task_retry_info *info = data; ++ int rc; ++ ++ rc = __session_login_task(info->rec, info->qtask); ++ if (rc == ISCSI_ERR_HOST_NOT_FOUND) { ++ if (info->retry_count == 5) { ++ /* give up */ ++ goto write_rsp; ++ } ++ ++ rc = queue_session_login_task_retry(info, info->rec, ++ info->qtask); ++ if (rc) ++ goto write_rsp; ++ /* we are going to internally retry */ ++ return; ++ } else if (rc) { ++ /* hard error - no retry */ ++ goto write_rsp; ++ } else ++ /* successfully started login operation */ ++ goto free; ++write_rsp: ++ mgmt_ipc_write_rsp(info->qtask, rc); ++free: ++ free(info); ++} ++ ++static int queue_session_login_task_retry(struct login_task_retry_info *info, ++ node_rec_t *rec, queue_task_t *qtask) ++{ ++ if (!info) { ++ info = malloc(sizeof(*info)); ++ if (!info) ++ return ISCSI_ERR_NOMEM; ++ memset(info, 0, sizeof(*info)); ++ info->qtask = qtask; ++ info->rec = rec; ++ } ++ ++ info->retry_count++; ++ log_debug(4, "queue session setup attempt in %d secs, retries %d\n", ++ 3, info->retry_count); ++ actor_timer(&info->retry_actor, 3000, session_login_task_retry, info); ++ return 0; ++} ++ + static int + sync_conn(iscsi_session_t *session, uint32_t cid) + { +@@ -2006,7 +2095,7 @@ iscsi_sync_session(node_rec_t *rec, queue_task_t *qtask, uint32_t sid) + if (!t) + return ISCSI_ERR_TRANS_NOT_FOUND; + +- session = __session_create(rec, t); ++ session = __session_create(rec, t, &err); + if (!session) + return ISCSI_ERR_LOGIN; + +-- +1.9.3 + diff --git a/SOURCES/0078-iscsid-Fix-double-close-of-mgmt-ipc-fd.patch b/SOURCES/0078-iscsid-Fix-double-close-of-mgmt-ipc-fd.patch new file mode 100644 index 0000000..aa20acf --- /dev/null +++ b/SOURCES/0078-iscsid-Fix-double-close-of-mgmt-ipc-fd.patch @@ -0,0 +1,28 @@ +From 134f8dcbcdd76bf2418c64de1b4e3dca6163773d Mon Sep 17 00:00:00 2001 +From: Duane Northcutt +Date: Wed, 14 May 2014 11:23:23 -0700 +Subject: [PATCH] iscsid: Fix double close of mgmt ipc fd + +Ran into a problem where iscsiadm was closing an already closed fd +(returning EBADF. Seems like the close() in line 466 is redundant as +it is done in mgmt_ipc_destroy_queue_task(). Could also assign +qtask->mgmt_ipc_fd to NULL, but it seems better to do it this way. +--- + usr/mgmt_ipc.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/usr/mgmt_ipc.c b/usr/mgmt_ipc.c +index a82c063..ee037d9 100644 +--- a/usr/mgmt_ipc.c ++++ b/usr/mgmt_ipc.c +@@ -463,7 +463,6 @@ mgmt_ipc_write_rsp(queue_task_t *qtask, int err) + qtask->rsp.err = err; + if (write(qtask->mgmt_ipc_fd, &qtask->rsp, sizeof(qtask->rsp)) < 0) + log_error("IPC qtask write failed: %s", strerror(errno)); +- close(qtask->mgmt_ipc_fd); + mgmt_ipc_destroy_queue_task(qtask); + } + +-- +1.9.3 + diff --git a/SOURCES/0079-iscsiadm-Initialize-param_count-in-set_host_chap_inf.patch b/SOURCES/0079-iscsiadm-Initialize-param_count-in-set_host_chap_inf.patch new file mode 100644 index 0000000..52dae88 --- /dev/null +++ b/SOURCES/0079-iscsiadm-Initialize-param_count-in-set_host_chap_inf.patch @@ -0,0 +1,27 @@ +From 5762ac0a9520d10e727b539403eacb7ab092e45f Mon Sep 17 00:00:00 2001 +From: Manish Rangankar +Date: Thu, 17 Jul 2014 05:27:20 -0400 +Subject: [PATCH] iscsiadm: Initialize param_count in set_host_chap_info + +Signed-off-by: Manish Rangankar +Signed-off-by: Vikas Chaudhary +--- + usr/iscsiadm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c +index 389f4b8..f886d39 100644 +--- a/usr/iscsiadm.c ++++ b/usr/iscsiadm.c +@@ -1503,7 +1503,7 @@ static int set_host_chap_info(uint32_t host_no, uint64_t chap_index, + struct iovec *iovs = NULL; + struct iovec *iov = NULL; + int type; +- int param_count; ++ int param_count = 0; + int param_used; + int rc = 0; + int fd, i = 0; +-- +1.9.3 + diff --git a/SOURCES/0081-iscsiadm-make-iface.ipaddress-optional-in-iface-conf.patch b/SOURCES/0081-iscsiadm-make-iface.ipaddress-optional-in-iface-conf.patch new file mode 100644 index 0000000..cc5bd6b --- /dev/null +++ b/SOURCES/0081-iscsiadm-make-iface.ipaddress-optional-in-iface-conf.patch @@ -0,0 +1,100 @@ +From 96eaaacaeac39625508e6ec8022bb5e565c36a7c Mon Sep 17 00:00:00 2001 +From: Anish Bhatt +Date: Fri, 25 Jul 2014 12:42:27 -0700 +Subject: [PATCH] iscsiadm : make iface.ipaddress optional in iface configs for + transports that don't have a hard requirement on it. + +v2: cxgb4i changed to NOT_REQ as set ipaddress is not supported +Signed-off-by: Anish Bhatt +--- + usr/initiator_common.c | 15 ++++++++++++--- + usr/transport.c | 8 ++++---- + usr/transport.h | 6 ++++++ + 3 files changed, 22 insertions(+), 7 deletions(-) + +diff --git a/usr/initiator_common.c b/usr/initiator_common.c +index 50f8d41..8ff993d 100644 +--- a/usr/initiator_common.c ++++ b/usr/initiator_common.c +@@ -685,9 +685,18 @@ int iscsi_host_set_net_params(struct iface_rec *iface, + + /* if we need to set the ip addr then set all the iface net settings */ + if (!iface_is_bound_by_ipaddr(iface)) { +- log_warning("Please set the iface.ipaddress for iface %s, " +- "then retry the login command.\n", iface->name); +- return EINVAL; ++ if (t->template->set_host_ip == SET_HOST_IP_REQ) { ++ log_warning("Please set the iface.ipaddress for iface " ++ "%s, then retry the login command.\n", ++ iface->name); ++ return EINVAL; ++ } else if (t->template->set_host_ip == SET_HOST_IP_OPT) { ++ log_info("Optional iface.ipaddress for iface %s " ++ "not set.\n", iface->name); ++ return 0; ++ } else { ++ return EINVAL; ++ } + } + + /* these type of drivers need the netdev upd */ +diff --git a/usr/transport.c b/usr/transport.c +index 2f38519..630f163 100644 +--- a/usr/transport.c ++++ b/usr/transport.c +@@ -58,7 +58,7 @@ struct iscsi_transport_template iscsi_iser = { + + struct iscsi_transport_template cxgb3i = { + .name = "cxgb3i", +- .set_host_ip = 1, ++ .set_host_ip = SET_HOST_IP_OPT, + .ep_connect = ktransport_ep_connect, + .ep_poll = ktransport_ep_poll, + .ep_disconnect = ktransport_ep_disconnect, +@@ -67,7 +67,7 @@ struct iscsi_transport_template cxgb3i = { + + struct iscsi_transport_template cxgb4i = { + .name = "cxgb4i", +- .set_host_ip = 1, ++ .set_host_ip = SET_HOST_IP_NOT_REQ, + .ep_connect = ktransport_ep_connect, + .ep_poll = ktransport_ep_poll, + .ep_disconnect = ktransport_ep_disconnect, +@@ -76,7 +76,7 @@ struct iscsi_transport_template cxgb4i = { + + struct iscsi_transport_template bnx2i = { + .name = "bnx2i", +- .set_host_ip = 1, ++ .set_host_ip = SET_HOST_IP_REQ, + .use_boot_info = 1, + .ep_connect = ktransport_ep_connect, + .ep_poll = ktransport_ep_poll, +@@ -94,7 +94,7 @@ struct iscsi_transport_template be2iscsi = { + + struct iscsi_transport_template qla4xxx = { + .name = "qla4xxx", +- .set_host_ip = 0, ++ .set_host_ip = SET_HOST_IP_NOT_REQ, + .ep_connect = ktransport_ep_connect, + .ep_poll = ktransport_ep_poll, + .ep_disconnect = ktransport_ep_disconnect, +diff --git a/usr/transport.h b/usr/transport.h +index 388e4b1..73041fa 100644 +--- a/usr/transport.h ++++ b/usr/transport.h +@@ -20,6 +20,12 @@ + #include "types.h" + #include "config.h" + ++enum set_host_ip_opts { ++ SET_HOST_IP_NOT_REQ, /* iface.ipaddress is not supported */ ++ SET_HOST_IP_REQ, /* iface.ipaddress must be specified */ ++ SET_HOST_IP_OPT, /* iface.ipaddress is not required */ ++}; ++ + struct iscsi_transport; + struct iscsi_conn; + +-- +1.9.3 + diff --git a/SOURCES/0082-Remove-unused-variable-path.patch b/SOURCES/0082-Remove-unused-variable-path.patch new file mode 100644 index 0000000..ed1ded1 --- /dev/null +++ b/SOURCES/0082-Remove-unused-variable-path.patch @@ -0,0 +1,33 @@ +From 21a7923de5b2f968643c2ffd96e5c9fb1b201fa3 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 1 Jul 2014 11:14:26 +0200 +Subject: [PATCH] Remove unused variable 'path' + +Signed-off-by: Hannes Reinecke +--- + usr/sysfs.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/usr/sysfs.c b/usr/sysfs.c +index 7f31c1a..d00c925 100644 +--- a/usr/sysfs.c ++++ b/usr/sysfs.c +@@ -671,7 +671,6 @@ int sysfs_set_param(char *id, char *subsys, char *attr_name, + char devpath[PATH_SIZE]; + size_t sysfs_len; + char path_full[PATH_SIZE]; +- const char *path; + int rc = 0, fd; + + if (!sysfs_lookup_devpath_by_subsys_id(devpath, sizeof(devpath), +@@ -684,7 +683,6 @@ int sysfs_set_param(char *id, char *subsys, char *attr_name, + sysfs_len = strlcpy(path_full, sysfs_path, sizeof(path_full)); + if(sysfs_len >= sizeof(path_full)) + sysfs_len = sizeof(path_full) - 1; +- path = &path_full[sysfs_len]; + strlcat(path_full, devpath, sizeof(path_full)); + strlcat(path_full, "/", sizeof(path_full)); + strlcat(path_full, attr_name, sizeof(path_full)); +-- +1.9.3 + diff --git a/SOURCES/0083-Parse-origin-value-from-iBFT.patch b/SOURCES/0083-Parse-origin-value-from-iBFT.patch new file mode 100644 index 0000000..dc5a695 --- /dev/null +++ b/SOURCES/0083-Parse-origin-value-from-iBFT.patch @@ -0,0 +1,81 @@ +From 78e24f50ab754f35f4aa208ade7c9fd794d82036 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 1 Jul 2014 11:14:57 +0200 +Subject: [PATCH] Parse 'origin' value from iBFT + +iBFT has an 'origin' field which indicates the origin of the +network address. If that is set to '3' it indicates that +DHCP has been used; there is no need to evaluate the 'dhcp' +field here. +In fact. latest iPXE sets the 'origin' field, but not the +'dhcp' field. + +Signed-off-by: Hannes Reinecke +--- + include/fw_context.h | 1 + + utils/fwparam_ibft/fw_entry.c | 8 +++++--- + utils/fwparam_ibft/fwparam_ibft_sysfs.c | 2 ++ + utils/fwparam_ibft/fwparam_sysfs.c | 2 ++ + 4 files changed, 10 insertions(+), 3 deletions(-) + +diff --git a/include/fw_context.h b/include/fw_context.h +index 6563d68..295b54d 100644 +--- a/include/fw_context.h ++++ b/include/fw_context.h +@@ -48,6 +48,7 @@ struct boot_context { + char initiatorname[TARGET_NAME_MAXLEN + 1]; + + /* network settings */ ++ char origin[2]; + char dhcp[NI_MAXHOST]; + char iface[IF_NAMESIZE]; + char mac[18]; +diff --git a/utils/fwparam_ibft/fw_entry.c b/utils/fwparam_ibft/fw_entry.c +index b6f05c1..295e905 100644 +--- a/utils/fwparam_ibft/fw_entry.c ++++ b/utils/fwparam_ibft/fw_entry.c +@@ -192,10 +192,12 @@ static void dump_network(struct boot_context *context) + if (strlen(context->mac)) + printf("%s = %s\n", IFACE_HWADDR, context->mac); + /* +- * If this has a valid address then DHCP was used (broadcom sends +- * 0.0.0.0). ++ * If the 'origin' field is '3' then DHCP is used. ++ * Otherwise evaluate the 'dhcp' field, if this has a valid ++ * address then DHCP was used (broadcom sends 0.0.0.0). + */ +- if (strlen(context->dhcp) && strcmp(context->dhcp, "0.0.0.0")) ++ if ((strlen(context->origin) && !strcmp(context->origin, "3")) || ++ (strlen(context->dhcp) && strcmp(context->dhcp, "0.0.0.0"))) + printf("%s = DHCP\n", IFACE_BOOT_PROTO); + else + printf("%s = STATIC\n", IFACE_BOOT_PROTO); +diff --git a/utils/fwparam_ibft/fwparam_ibft_sysfs.c b/utils/fwparam_ibft/fwparam_ibft_sysfs.c +index 9185c85..2dc6f6d 100644 +--- a/utils/fwparam_ibft/fwparam_ibft_sysfs.c ++++ b/utils/fwparam_ibft/fwparam_ibft_sysfs.c +@@ -201,6 +201,8 @@ static int fill_nic_context(char *id, struct boot_context *context) + sizeof(context->secondary_dns)); + sysfs_get_str(id, IBFT_SUBSYS, "dhcp", context->dhcp, + sizeof(context->dhcp)); ++ sysfs_get_str(id, IBFT_SUBSYS, "origin", context->origin, ++ sizeof(context->origin)); + return 0; + } + +diff --git a/utils/fwparam_ibft/fwparam_sysfs.c b/utils/fwparam_ibft/fwparam_sysfs.c +index 2f37b59..09dd9fd 100644 +--- a/utils/fwparam_ibft/fwparam_sysfs.c ++++ b/utils/fwparam_ibft/fwparam_sysfs.c +@@ -217,6 +217,8 @@ static int fill_nic_context(char *subsys, char *id, + sizeof(context->secondary_dns)); + sysfs_get_str(id, subsys, "dhcp", context->dhcp, + sizeof(context->dhcp)); ++ sysfs_get_str(id, subsys, "origin", context->origin, ++ sizeof(context->origin)); + return 0; + } + +-- +1.9.3 + diff --git a/SOURCES/0084-isns-Add-docs-for-deregistering-discovery-domains.patch b/SOURCES/0084-isns-Add-docs-for-deregistering-discovery-domains.patch new file mode 100644 index 0000000..b5f0adc --- /dev/null +++ b/SOURCES/0084-isns-Add-docs-for-deregistering-discovery-domains.patch @@ -0,0 +1,63 @@ +From c9d830bcd05af46df5345476a99f3086094cf44c Mon Sep 17 00:00:00 2001 +From: Lee Duncan +Date: Thu, 4 Sep 2014 10:01:53 -0700 +Subject: [PATCH] isns: Add docs for deregistering discovery domains. + +Without this update to the isnsadm help message and +man page, it can be difficult to figure out how to +deregister a registered discovery domain. +--- + utils/open-isns/doc/isnsadm.8 | 16 ++++++++++++++++ + utils/open-isns/isnsadm.c | 2 ++ + 2 files changed, 18 insertions(+) + +diff --git a/utils/open-isns/doc/isnsadm.8 b/utils/open-isns/doc/isnsadm.8 +index c3e2b83..88ec4cf 100644 +--- a/utils/open-isns/doc/isnsadm.8 ++++ b/utils/open-isns/doc/isnsadm.8 +@@ -25,6 +25,10 @@ isnsadm \- iSNS client utility + .PP + .B isnsadm + .RB [ ... ] ++.RI --dd-deregister " dd-id attr=value ++.PP ++.B isnsadm ++.RB [ ... ] + .RI --enroll " client-name attr=value + .PP + .B isnsadm +@@ -452,6 +456,18 @@ Note, in order to add members to an existing domain, you must + specify the domain's numeric ID. The domain's symbolic name + is not a valid handle when referring to a discovery domain. + .\"--------------------------- ++.SS Discovery Domain Deregistration mode ++In this mode, you can deregister a discoery domain previously registered. ++Only the node which registered a discovery domain in the first place is ++permitted to remove it, or any of its members. (Control ++nodes are not bound by this restriction). ++.PP ++In Discovery Domain deregistration mode, the argument list consists of ++the Discovery Domain ID, followed by a list of ++.IB attr = value ++pairs. Discovery Domain Deregistration supports the same set of attributes as ++query mode. ++.\"--------------------------- + .SS Client Enrollment + This mode only works when the server recognizes the client + as having control node capabilities, which is possible in +diff --git a/utils/open-isns/isnsadm.c b/utils/open-isns/isnsadm.c +index fadd87d..db34f8f 100644 +--- a/utils/open-isns/isnsadm.c ++++ b/utils/open-isns/isnsadm.c +@@ -272,6 +272,8 @@ usage(int exval, const char *msg) + "\nThe following actions are supported:\n" + " --register Register one or more objects\n" + " --deregister Deregister an object (and children)\n" ++ " --dd-register Register a Discovery Domain (and members)\n" ++ " --dd-deregister Deregister a Discovery Domain (and members)\n" + " --query Query iSNS server for objects\n" + " --list List all objects of a given type\n" + " --enroll Create a new policy object for a client\n" +-- +1.9.3 + diff --git a/SOURCES/0114-fix-regression-in-iscsi_tcp-iface-binding.patch b/SOURCES/0114-fix-regression-in-iscsi_tcp-iface-binding.patch new file mode 100644 index 0000000..ff4da71 --- /dev/null +++ b/SOURCES/0114-fix-regression-in-iscsi_tcp-iface-binding.patch @@ -0,0 +1,129 @@ +From 2966a9262df88fcfa971f988f93a9bf168600331 Mon Sep 17 00:00:00 2001 +From: Chris Leech +Date: Sun, 11 Jan 2015 21:36:24 -0800 +Subject: [PATCH] fix regression in iscsi_tcp iface binding + +The changes in "retry login for ISCSI_ERR_HOST_NOT_FOUND" caused +sessions using the iscsi_tcp transport bound to a network iface to fail +to connect due to the host lookup failing (iscsi_tcp hosts are +dynamically allocated per-session). + +This marks transports that use a host fixed to a hardware offload device +with "bind_ep_required" and only requires a host lookup before starting +the connection if this flag is set. + +Signed-off-by: Chris Leech +--- + usr/initiator.c | 30 ++++++++++++++++-------------- + usr/transport.c | 6 ++++++ + usr/transport.h | 1 + + 3 files changed, 23 insertions(+), 14 deletions(-) + +diff --git a/usr/initiator.c b/usr/initiator.c +index f54b708..1aadc9b 100644 +--- a/usr/initiator.c ++++ b/usr/initiator.c +@@ -398,20 +398,22 @@ __session_create(node_rec_t *rec, struct iscsi_transport *t, int *rc) + + iscsi_session_init_params(session); + +- hostno = iscsi_sysfs_get_host_no_from_hwinfo(&rec->iface, rc); +- if (!*rc) { +- /* +- * if the netdev or mac was set, then we are going to want +- * to want to bind the all the conns/eps to a specific host +- * if offload is used. +- */ +- session->conn[0].bind_ep = 1; +- session->hostno = hostno; +- } else if (*rc == ISCSI_ERR_HOST_NOT_FOUND) { +- goto free_session; +- } else { +- *rc = 0; +- } ++ if (t->template->bind_ep_required) { ++ hostno = iscsi_sysfs_get_host_no_from_hwinfo(&rec->iface, rc); ++ if (!*rc) { ++ /* ++ * if the netdev or mac was set, then we are going to want ++ * to want to bind the all the conns/eps to a specific host ++ * if offload is used. ++ */ ++ session->conn[0].bind_ep = 1; ++ session->hostno = hostno; ++ } else if (*rc == ISCSI_ERR_HOST_NOT_FOUND) { ++ goto free_session; ++ } else { ++ *rc = 0; ++ } ++ } + + list_add_tail(&session->list, &t->sessions); + return session; +diff --git a/usr/transport.c b/usr/transport.c +index 630f163..e778a6e 100644 +--- a/usr/transport.c ++++ b/usr/transport.c +@@ -59,6 +59,7 @@ struct iscsi_transport_template iscsi_iser = { + struct iscsi_transport_template cxgb3i = { + .name = "cxgb3i", + .set_host_ip = SET_HOST_IP_OPT, ++ .bind_ep_required = 1, + .ep_connect = ktransport_ep_connect, + .ep_poll = ktransport_ep_poll, + .ep_disconnect = ktransport_ep_disconnect, +@@ -68,6 +69,7 @@ struct iscsi_transport_template cxgb3i = { + struct iscsi_transport_template cxgb4i = { + .name = "cxgb4i", + .set_host_ip = SET_HOST_IP_NOT_REQ, ++ .bind_ep_required = 1, + .ep_connect = ktransport_ep_connect, + .ep_poll = ktransport_ep_poll, + .ep_disconnect = ktransport_ep_disconnect, +@@ -78,6 +80,7 @@ struct iscsi_transport_template bnx2i = { + .name = "bnx2i", + .set_host_ip = SET_HOST_IP_REQ, + .use_boot_info = 1, ++ .bind_ep_required = 1, + .ep_connect = ktransport_ep_connect, + .ep_poll = ktransport_ep_poll, + .ep_disconnect = ktransport_ep_disconnect, +@@ -86,6 +89,7 @@ struct iscsi_transport_template bnx2i = { + + struct iscsi_transport_template be2iscsi = { + .name = "be2iscsi", ++ .bind_ep_required = 1, + .create_conn = be2iscsi_create_conn, + .ep_connect = ktransport_ep_connect, + .ep_poll = ktransport_ep_poll, +@@ -95,6 +99,7 @@ struct iscsi_transport_template be2iscsi = { + struct iscsi_transport_template qla4xxx = { + .name = "qla4xxx", + .set_host_ip = SET_HOST_IP_NOT_REQ, ++ .bind_ep_required = 1, + .ep_connect = ktransport_ep_connect, + .ep_poll = ktransport_ep_poll, + .ep_disconnect = ktransport_ep_disconnect, +@@ -102,6 +107,7 @@ struct iscsi_transport_template qla4xxx = { + + struct iscsi_transport_template ocs = { + .name = "ocs", ++ .bind_ep_required = 1, + .ep_connect = ktransport_ep_connect, + .ep_poll = ktransport_ep_poll, + .ep_disconnect = ktransport_ep_disconnect, +diff --git a/usr/transport.h b/usr/transport.h +index 73041fa..831403b 100644 +--- a/usr/transport.h ++++ b/usr/transport.h +@@ -38,6 +38,7 @@ struct iscsi_transport_template { + */ + uint8_t set_host_ip; + uint8_t use_boot_info; ++ uint8_t bind_ep_required; + int (*ep_connect) (struct iscsi_conn *conn, int non_blocking); + int (*ep_poll) (struct iscsi_conn *conn, int timeout_ms); + void (*ep_disconnect) (struct iscsi_conn *conn); +-- +2.1.0 + diff --git a/SOURCES/0130-guard-against-NULL-ptr-during-discovery-from-unexpec.patch b/SOURCES/0130-guard-against-NULL-ptr-during-discovery-from-unexpec.patch new file mode 100644 index 0000000..fb9d7ec --- /dev/null +++ b/SOURCES/0130-guard-against-NULL-ptr-during-discovery-from-unexpec.patch @@ -0,0 +1,34 @@ +From 46bc7ff0091af95735c03995be7d6002b03944dd Mon Sep 17 00:00:00 2001 +From: Chris Leech +Date: Mon, 17 Nov 2014 21:34:06 -0800 +Subject: [PATCH] guard against NULL ptr during discovery from unexpected event + +When demand loading drivers during discovery, iscsiadm can receive an +unexpected netlink event, like a link up, when looking for a discovery +session login status. That could expose krecv_conn_state to a +connection without a valid recv_context pointer. +Guard against that to prevent the NULL dereference. + +Signed-off-by: Chris Leech +--- + usr/netlink.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/usr/netlink.c b/usr/netlink.c +index 1c4b5cc..18be5e5 100644 +--- a/usr/netlink.c ++++ b/usr/netlink.c +@@ -1035,6 +1035,10 @@ static int krecv_conn_state(struct iscsi_conn *conn, uint32_t *state) + /* fatal handling error or conn error */ + goto exit; + ++ /* unexpected event without a receive context */ ++ if (!conn->recv_context) ++ return -EAGAIN; ++ + *state = *(enum iscsi_conn_state *)conn->recv_context->data; + + ipc_ev_clbk->put_ev_context(conn->recv_context); +-- +1.9.3 + diff --git a/SOURCES/0131-iscsiadm-Fix-the-hostno-check-for-stats-submode-of-h.patch b/SOURCES/0131-iscsiadm-Fix-the-hostno-check-for-stats-submode-of-h.patch deleted file mode 100644 index 64ce02b..0000000 --- a/SOURCES/0131-iscsiadm-Fix-the-hostno-check-for-stats-submode-of-h.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 8de8ce551cbdb1250b696a5eedc5cff2b68e71e8 Mon Sep 17 00:00:00 2001 -From: Chris Leech -Date: Mon, 24 Feb 2014 03:14:17 -0500 -Subject: [PATCH] iscsiadm: Fix the hostno check for stats submode of host mode - -This fixes the condition where hostno value of 0 was being treated -as invalid. - -Signed-off-by: Chris Leech -Signed-off-by: Adheer Chandravanshi ---- - usr/iscsiadm.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c -index 3cde8d1..36617ab 100644 ---- a/usr/iscsiadm.c -+++ b/usr/iscsiadm.c -@@ -3470,7 +3470,7 @@ main(int argc, char **argv) - ¶ms); - break; - case MODE_HOST_STATS: -- if (!host_no) { -+ if (host_no > MAX_HOST_NO) { - log_error("STATS mode requires host no"); - rc = ISCSI_ERR_INVAL; - break; --- -1.8.3.1 - diff --git a/SOURCES/0132-iscsiadm-Fix-the-compile-time-warning.patch b/SOURCES/0132-iscsiadm-Fix-the-compile-time-warning.patch deleted file mode 100644 index b6fc868..0000000 --- a/SOURCES/0132-iscsiadm-Fix-the-compile-time-warning.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 0e6cb00eac013c270741ee2bdb9427ccc62ad705 Mon Sep 17 00:00:00 2001 -From: Adheer Chandravanshi -Date: Mon, 24 Feb 2014 03:14:18 -0500 -Subject: [PATCH] iscsiadm: Fix the compile time warning - -This fixes the following compile time warning message: - -iscsiadm.c:2248: warning: passing argument 1 of 'print_host_stats' from incompatible pointer type - -Signed-off-by: Adheer Chandravanshi ---- - usr/iscsiadm.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c -index 36617ab..389f4b8 100644 ---- a/usr/iscsiadm.c -+++ b/usr/iscsiadm.c -@@ -2245,7 +2245,8 @@ static int exec_host_stats_op(int op, int info_level, uint32_t host_no) - goto exit_host_stats; - } - -- print_host_stats(req_buf + sizeof(struct iscsi_uevent)); -+ print_host_stats((struct iscsi_offload_host_stats *)(req_buf + -+ sizeof(struct iscsi_uevent))); - - ipc->ctldev_close(); - --- -1.8.3.1 - diff --git a/SOURCES/0140-add-discovery-as-a-valid-mode-in-iscsiadm.8.patch b/SOURCES/0140-add-discovery-as-a-valid-mode-in-iscsiadm.8.patch new file mode 100644 index 0000000..bfff999 --- /dev/null +++ b/SOURCES/0140-add-discovery-as-a-valid-mode-in-iscsiadm.8.patch @@ -0,0 +1,36 @@ +From f6e152e735231fe5cb1075b6d1c27ed1b248bdbd Mon Sep 17 00:00:00 2001 +From: Chris Leech +Date: Wed, 24 Sep 2014 15:35:24 -0700 +Subject: [PATCH] add discovery as a valid mode in iscsiadm.8 + +--- + doc/iscsiadm.8 | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/doc/iscsiadm.8 b/doc/iscsiadm.8 +index 9a945d1..05793b2 100644 +--- a/doc/iscsiadm.8 ++++ b/doc/iscsiadm.8 +@@ -174,13 +174,13 @@ for session mode). + .TP + \fB\-m, \-\-mode \fIop\fR + specify the mode. \fIop\fR +-must be one of \fIdiscoverydb\fR, \fInode\fR, \fIfw\fR, \fIhost\fR \fIiface\fR or \fIsession\fR. ++must be one of \fIdiscovery\fR, \fIdiscoverydb\fR, \fInode\fR, \fIfw\fR, \fIhost\fR \fIiface\fR or \fIsession\fR. + .IP +-If no other options are specified: for \fIdiscoverydb\fR and \fInode\fR, all +-of their respective records are displayed; for \fIsession\fR, all active +-sessions and connections are displayed; for \fIfw\fR, all boot firmware +-values are displayed; for \fIhost\fR, all iSCSI hosts are displayed; and +-for \fIiface\fR, all ifaces setup in /etc/iscsi/ifaces are displayed. ++If no other options are specified: for \fIdiscovery\fR, \fIdiscoverydb\fR and ++\fInode\fR, all of their respective records are displayed; for \fIsession\fR, ++all active sessions and connections are displayed; for \fIfw\fR, all boot ++firmware values are displayed; for \fIhost\fR, all iSCSI hosts are displayed; ++and for \fIiface\fR, all ifaces setup in /etc/iscsi/ifaces are displayed. + + .TP + \fB\-n\fR, \fB\-\-name=\fIname\fR +-- +1.9.3 + diff --git a/SOURCES/0152-use-var-for-config.patch b/SOURCES/0152-use-var-for-config.patch index 2e4288c..dc5a73c 100644 --- a/SOURCES/0152-use-var-for-config.patch +++ b/SOURCES/0152-use-var-for-config.patch @@ -1,4 +1,4 @@ -From be8702e609fdfd417547f758cb88956066b63023 Mon Sep 17 00:00:00 2001 +From 8c287d6b8c1edf51c2f91878d72822d33aa8348b Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Mon, 19 Nov 2012 16:38:45 -0800 Subject: use var for config @@ -12,7 +12,7 @@ Subject: use var for config 5 files changed, 33 insertions(+), 31 deletions(-) diff --git a/README b/README -index 90e2074..9cc62ca 100644 +index 0ac4529..e7c7bf5 100644 --- a/README +++ b/README @@ -156,8 +156,7 @@ Usage: iscsid [OPTION] @@ -25,7 +25,7 @@ index 90e2074..9cc62ca 100644 Configuration is contained in directories for: -@@ -467,7 +466,7 @@ a scsi_host per HBA port). +@@ -475,7 +474,7 @@ a scsi_host per HBA port). To manage both types of initiator stacks, iscsiadm uses the interface (iface) structure. For each HBA port or for software iscsi for each network device (ethX) or NIC, that you wish to bind sessions to you must create @@ -34,7 +34,7 @@ index 90e2074..9cc62ca 100644 Prep: -@@ -501,29 +500,29 @@ Running: +@@ -509,29 +508,29 @@ Running: iface0 qla4xxx,00:c0:dd:08:63:e8,20.15.0.7,default,iqn.2005-06.com.redhat:madmax iface1 qla4xxx,00:c0:dd:08:63:ea,20.15.0.9,default,iqn.2005-06.com.redhat:madmax @@ -69,7 +69,7 @@ index 90e2074..9cc62ca 100644 iface.transport_name = tcp iface.hwaddress = 00:C0:DD:08:63:E7 -@@ -573,7 +572,7 @@ cxgb3i.00:07:43:05:97:07 cxgb3i,00:07:43:05:97:07,,, +@@ -581,7 +580,7 @@ cxgb3i.00:07:43:05:97:07 cxgb3i,00:07:43:05:97:07,,, qla4xxx.00:0e:1e:04:8b:2e qla4xxx,00:0e:1e:04:8b:2e,,, @@ -78,7 +78,7 @@ index 90e2074..9cc62ca 100644 The format is: iface_name transport_name,hwaddress,ipaddress,net_ifacename,initiatorname -@@ -659,7 +658,7 @@ need a seperate network connection to the target for discovery purposes. +@@ -667,7 +666,7 @@ need a seperate network connection to the target for discovery purposes. *This will be fixed in the next version of open-iscsi* For compatibility reasons, when you run iscsiadm to do discovery, it @@ -87,7 +87,7 @@ index 90e2074..9cc62ca 100644 tcp for the iface.transport and it will bind the portals that are discovered so that they will be logged in through those ifaces. This behavior can also be overriden by passing in the interfaces you want to use. For the case -@@ -677,7 +676,7 @@ we do not bind a session to a iface, then you can use the special iface +@@ -685,7 +684,7 @@ we do not bind a session to a iface, then you can use the special iface iscsiadm -m discoverydb -t st -p ip:port -I default --discover -P 1 @@ -96,7 +96,7 @@ index 90e2074..9cc62ca 100644 not pass anything into iscsiadm, running iscsiadm will do the default behavior, where we allow the network subsystem to decide which device to use. -@@ -719,7 +718,7 @@ To now log into targets it is the same as with sofware iscsi. See section +@@ -727,7 +726,7 @@ To now log into targets it is the same as with sofware iscsi. See section ./iscsiadm -m discoverydb -t st -p 192.168.1.1:3260 --discover @@ -105,7 +105,7 @@ index 90e2074..9cc62ca 100644 ID [portal = 192.168.1.1:3260 and type = sendtargets. If found it will perform discovery using the settings stored in the record. If a record does not exist, it will be created using the iscsid.conf -@@ -728,7 +727,7 @@ To now log into targets it is the same as with sofware iscsi. See section +@@ -736,7 +735,7 @@ To now log into targets it is the same as with sofware iscsi. See section The argument to -p may also be a hostname instead of an address. ./iscsiadm -m discoverydb -t st -p smoehost --discover @@ -114,7 +114,7 @@ index 90e2074..9cc62ca 100644 interfaces using software iscsi. If any are found then nodes found during discovery will be setup so that they can logged in through those interfaces. To specify a specific iface, pass the -@@ -784,7 +783,7 @@ To now log into targets it is the same as with sofware iscsi. See section +@@ -792,7 +791,7 @@ To now log into targets it is the same as with sofware iscsi. See section This command will perform discovery, but not manipulate the node DB. - SendTargets iSCSI Discovery with a specific interface. If you @@ -123,7 +123,7 @@ index 90e2074..9cc62ca 100644 then you can pass them in during discovery: ./iscsiadm -m discoverydb -t sendtargets -p 192.168.1.1:3260 \ -@@ -1145,8 +1144,8 @@ where targetname is the name of the target and ip_address:port is the address +@@ -1193,8 +1192,8 @@ where targetname is the name of the target and ip_address:port is the address and port of the portal. tpgt, is the portal group tag of the portal, and is not used in iscsiadm commands except for static record creation. And iface name is the name of the iscsi interface @@ -134,7 +134,7 @@ index 90e2074..9cc62ca 100644 Default here is iscsi_tcp/tcp to be used over which ever NIC the network layer decides is best. -@@ -1261,7 +1260,7 @@ If set, iscsid will perform discovery to the address every +@@ -1309,7 +1308,7 @@ If set, iscsid will perform discovery to the address every discovery.isns.discoveryd_poll_inval or discovery.sendtargets.discoveryd_poll_inval seconds, and it will log into any portals found from the discovery source using @@ -144,10 +144,10 @@ index 90e2074..9cc62ca 100644 Note that for iSNS the poll_interval does not have to be set. If not set, iscsid will only perform rediscovery when it gets a SCN from the server. diff --git a/doc/iscsiadm.8 b/doc/iscsiadm.8 -index 6b15fcd..30811bd 100644 +index 05793b2..334520a 100644 --- a/doc/iscsiadm.8 +++ b/doc/iscsiadm.8 -@@ -101,7 +101,7 @@ This option is only valid for ping submode. +@@ -103,7 +103,7 @@ This option is only valid for ping submode. .TP \fB\-I\fR, \fB\-\-interface=\fI[iface]\fR The interface argument specifies the iSCSI interface to use for the operation. @@ -156,16 +156,16 @@ index 6b15fcd..30811bd 100644 iSCSI (qla4xxx) the iface config must have the hardware address (iface.hwaddress = port's MAC address) and the driver/transport_name (iface.transport_name). The iface's name is -@@ -178,7 +178,7 @@ If no other options are specified: for \fIdiscoverydb\fR and \fInode\fR, all - of their respective records are displayed; for \fIsession\fR, all active - sessions and connections are displayed; for \fIfw\fR, all boot firmware - values are displayed; for \fIhost\fR, all iSCSI hosts are displayed; and --for \fIiface\fR, all ifaces setup in /etc/iscsi/ifaces are displayed. -+for \fIiface\fR, all ifaces setup in /var/lib/iscsi/ifaces are displayed. +@@ -180,7 +180,7 @@ If no other options are specified: for \fIdiscovery\fR, \fIdiscoverydb\fR and + \fInode\fR, all of their respective records are displayed; for \fIsession\fR, + all active sessions and connections are displayed; for \fIfw\fR, all boot + firmware values are displayed; for \fIhost\fR, all iSCSI hosts are displayed; +-and for \fIiface\fR, all ifaces setup in /etc/iscsi/ifaces are displayed. ++and for \fIiface\fR, all ifaces setup in /var/lib/iscsi/ifaces are displayed. .TP \fB\-n\fR, \fB\-\-name=\fIname\fR -@@ -562,10 +562,10 @@ The configuration file read by \fBiscsid\fR and \fBiscsiadm\fR on startup. +@@ -565,10 +565,10 @@ The configuration file read by \fBiscsid\fR and \fBiscsiadm\fR on startup. The file containing the iSCSI InitiatorName and InitiatorAlias read by \fBiscsid\fR and \fBiscsiadm\fR on startup. .TP @@ -179,10 +179,10 @@ index 6b15fcd..30811bd 100644 .SH "SEE ALSO" diff --git a/usr/idbm.c b/usr/idbm.c -index 634e547..4bb9810 100644 +index ce9fb6a..c3c8de5 100644 --- a/usr/idbm.c +++ b/usr/idbm.c -@@ -2721,9 +2721,9 @@ free_info: +@@ -2919,9 +2919,9 @@ free_info: int idbm_init(idbm_get_config_file_fn *fn) { /* make sure root db dir is there */ @@ -196,7 +196,7 @@ index 634e547..4bb9810 100644 return errno; } diff --git a/usr/idbm.h b/usr/idbm.h -index 5e4038d..1e9b132 100644 +index b9020fe..b89ddff 100644 --- a/usr/idbm.h +++ b/usr/idbm.h @@ -29,12 +29,13 @@ @@ -235,5 +235,5 @@ index 01f7074..f396918 100644 struct iface_rec; struct list_head; -- -1.8.1.4 +1.9.3 diff --git a/SOURCES/0170-fix-systemd-unit-wants.patch b/SOURCES/0170-fix-systemd-unit-wants.patch new file mode 100644 index 0000000..45ce32a --- /dev/null +++ b/SOURCES/0170-fix-systemd-unit-wants.patch @@ -0,0 +1,41 @@ +From 347e6120213efda47a45443b4e366ed1400433c1 Mon Sep 17 00:00:00 2001 +From: Chris Leech +Date: Wed, 17 Sep 2014 09:58:39 -0700 +Subject: [PATCH] updates to iscsi.service + +Resolves: #1126524 +Resolves: #1111925 +--- + etc/systemd/iscsi.service | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service +index 3de76c5..ad7be34 100644 +--- a/etc/systemd/iscsi.service ++++ b/etc/systemd/iscsi.service +@@ -5,17 +5,17 @@ DefaultDependencies=no + Conflicts=shutdown.target + After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service + Before=remote-fs-pre.target ++Wants=remote-fs-pre.target + ConditionDirectoryNotEmpty=|/var/lib/iscsi/nodes + ConditionDirectoryNotEmpty=|/sys/class/iscsi_session + + [Service] + Type=oneshot + RemainAfterExit=true +-ExecStart=/usr/libexec/iscsi-mark-root-nodes +-SuccessExitStatus=21 +-ExecStart=/sbin/iscsiadm -m node --loginall=automatic +-ExecStop=/sbin/iscsiadm -m node --logoutall=automatic +-ExecReload=/sbin/iscsiadm -m node --loginall=automatic ++ExecStart=-/usr/libexec/iscsi-mark-root-nodes ++ExecStart=-/sbin/iscsiadm -m node --loginall=automatic ++ExecStop=-/sbin/iscsiadm -m node --logoutall=automatic ++ExecReload=-/sbin/iscsiadm -m node --loginall=automatic + + [Install] + WantedBy=sysinit.target +-- +1.9.3 + diff --git a/SOURCES/0171-iscsiuio-strict-aliasing.patch b/SOURCES/0171-iscsiuio-strict-aliasing.patch new file mode 100644 index 0000000..1a0eb68 --- /dev/null +++ b/SOURCES/0171-iscsiuio-strict-aliasing.patch @@ -0,0 +1,26 @@ +diff --git a/iscsiuio/configure b/iscsiuio/configure +index 50cfd90..c930b67 100755 +--- a/iscsiuio/configure ++++ b/iscsiuio/configure +@@ -22782,7 +22782,7 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + +-CFLAGS="${CFLAGS} -O2 -Wall" ++CFLAGS="${CFLAGS} -O2 -Wall -fno-strict-aliasing" + ## check for --enable-debug first before checking CFLAGS before + ## so that we don't mix -O and -g + # Check whether --enable-debug was given. +diff --git a/iscsiuio/configure.ac b/iscsiuio/configure.ac +index e4af3b2..551a513 100644 +--- a/iscsiuio/configure.ac ++++ b/iscsiuio/configure.ac +@@ -52,7 +52,7 @@ AC_LIBTOOL_DLOPEN + # libtool stuff + AC_PROG_LIBTOOL + +-CFLAGS="${CFLAGS} -O2 -Wall" ++CFLAGS="${CFLAGS} -O2 -Wall -fno-strict-aliasing" + ## check for --enable-debug first before checking CFLAGS before + ## so that we don't mix -O and -g + AC_ARG_ENABLE(debug, diff --git a/SOURCES/0172-move-cleanup-to-seperate-service.patch b/SOURCES/0172-move-cleanup-to-seperate-service.patch new file mode 100644 index 0000000..f54de39 --- /dev/null +++ b/SOURCES/0172-move-cleanup-to-seperate-service.patch @@ -0,0 +1,56 @@ +From 56d9d1c6a02dcad0915c0673f9cd2e653c86302f Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Tue, 13 Jan 2015 16:30:01 -0800 +Subject: [PATCH] 0171-make-session-shutdown-a-seperate-service.patch + +--- + etc/systemd/iscsi-shutdown.service | 14 ++++++++++++++ + etc/systemd/iscsi.service | 3 +-- + 2 files changed, 15 insertions(+), 2 deletions(-) + create mode 100644 etc/systemd/iscsi-shutdown.service + +diff --git a/etc/systemd/iscsi-shutdown.service b/etc/systemd/iscsi-shutdown.service +new file mode 100644 +index 0000000..23758e9 +--- /dev/null ++++ b/etc/systemd/iscsi-shutdown.service +@@ -0,0 +1,15 @@ ++[Unit] ++Description=Logout off all iSCSI sessions on shutdown ++Documentation=man:iscsid(8) man:iscsiadm(8) ++DefaultDependencies=no ++Conflicts=shutdown.target ++After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service ++Before=remote-fs-pre.target ++Wants=remote-fs-pre.target ++RefuseManualStop=yes ++ ++[Service] ++Type=oneshot ++RemainAfterExit=true ++ExecStart=-/bin/true ++ExecStop=-/sbin/iscsiadm -m node --logoutall=all +diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service +index ad7be34..2736956 100644 +--- a/etc/systemd/iscsi.service ++++ b/etc/systemd/iscsi.service +@@ -5,7 +5,7 @@ DefaultDependencies=no + Conflicts=shutdown.target + After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service + Before=remote-fs-pre.target +-Wants=remote-fs-pre.target ++Wants=remote-fs-pre.target iscsi-shutdown.service + ConditionDirectoryNotEmpty=|/var/lib/iscsi/nodes + ConditionDirectoryNotEmpty=|/sys/class/iscsi_session + +@@ -14,7 +14,6 @@ Type=oneshot + RemainAfterExit=true + ExecStart=-/usr/libexec/iscsi-mark-root-nodes + ExecStart=-/sbin/iscsiadm -m node --loginall=automatic +-ExecStop=-/sbin/iscsiadm -m node --logoutall=automatic + ExecReload=-/sbin/iscsiadm -m node --loginall=automatic + + [Install] +-- +2.1.0 + diff --git a/SOURCES/0199-use-Red-Hat-version-string-to-match-RPM-package-vers.patch b/SOURCES/0199-use-Red-Hat-version-string-to-match-RPM-package-vers.patch index 1af14f0..c222d9d 100644 --- a/SOURCES/0199-use-Red-Hat-version-string-to-match-RPM-package-vers.patch +++ b/SOURCES/0199-use-Red-Hat-version-string-to-match-RPM-package-vers.patch @@ -16,7 +16,7 @@ index a090522..aef0c3d 100644 * some other maintainer could merge a patch without going through us */ -#define ISCSI_VERSION_STR "2.0-873" -+#define ISCSI_VERSION_STR "6.2.0.873-21" ++#define ISCSI_VERSION_STR "6.2.0.873-28" #define ISCSI_VERSION_FILE "/sys/module/scsi_transport_iscsi/version" #endif diff --git a/SPECS/iscsi-initiator-utils.spec b/SPECS/iscsi-initiator-utils.spec index be98cd6..05e382f 100644 --- a/SPECS/iscsi-initiator-utils.spec +++ b/SPECS/iscsi-initiator-utils.spec @@ -4,7 +4,7 @@ Summary: iSCSI daemon and utility programs Name: iscsi-initiator-utils Version: 6.%{open_iscsi_version}.%{open_iscsi_build} -Release: 21%{?dist} +Release: 29%{?dist} Group: System Environment/Daemons License: GPLv2+ URL: http://www.open-iscsi.org @@ -81,10 +81,23 @@ Patch64: 0064-ISCSIUIO-Removed-the-auto-generated-COPYING-file.patch Patch68: 0068-iscsiuio-fix-compilation.patch Patch69: 0069-Add-missing-DESTDIR.patch Patch70: 0070-iscsi-tools-set-non-negotiated-params-early.patch +Patch71: 0071-iscsiadm-Fix-the-hostno-check-for-stats-submode-of-h.patch +Patch72: 0072-iscsiadm-Fix-the-compile-time-warning.patch +Patch74: 0074-iscsid-Fix-handling-of-iscsi-async-events.patch +Patch75: 0075-be2iscsi-Fix-MaxXmitDataLenght-of-the-driver.patch +Patch76: 0076-Fix-StatSN-in-Open-iSCSI-Stack.patch +Patch77: 0077-iscsid-retry-login-for-ISCSI_ERR_HOST_NOT_FOUND.patch +Patch78: 0078-iscsid-Fix-double-close-of-mgmt-ipc-fd.patch +Patch79: 0079-iscsiadm-Initialize-param_count-in-set_host_chap_inf.patch +Patch81: 0081-iscsiadm-make-iface.ipaddress-optional-in-iface-conf.patch +Patch82: 0082-Remove-unused-variable-path.patch +Patch83: 0083-Parse-origin-value-from-iBFT.patch +Patch84: 0084-isns-Add-docs-for-deregistering-discovery-domains.patch +Patch114: 0114-fix-regression-in-iscsi_tcp-iface-binding.patch # not (yet) upstream merged -Patch131: 0131-iscsiadm-Fix-the-hostno-check-for-stats-submode-of-h.patch -Patch132: 0132-iscsiadm-Fix-the-compile-time-warning.patch +Patch130: 0130-guard-against-NULL-ptr-during-discovery-from-unexpec.patch +Patch140: 0140-add-discovery-as-a-valid-mode-in-iscsiadm.8.patch Patch143: 0143-idmb_rec_write-check-for-tpgt-first.patch Patch145: 0145-idbm_rec_write-seperate-old-and-new-style-writes.patch Patch146: 0146-idbw_rec_write-pick-tpgt-from-existing-record.patch @@ -109,6 +122,9 @@ Patch166: 0166-start-socket-listeners-on-iscsiadm-command.patch Patch167: 0167-Revert-iscsiadm-return-error-when-login-fails.patch Patch168: 0168-update-handling-of-boot-sessions.patch Patch169: 0169-update-iscsi.service-for-boot-session-recovery.patch +Patch170: 0170-fix-systemd-unit-wants.patch +Patch171: 0171-iscsiuio-strict-aliasing.patch +Patch172: 0172-move-cleanup-to-seperate-service.patch # version string, needs to be updated with each build Patch199: 0199-use-Red-Hat-version-string-to-match-RPM-package-vers.patch @@ -217,9 +233,22 @@ developing applications that use %{name}. %patch68 -p1 %patch69 -p1 %patch70 -p1 +%patch71 -p1 +%patch72 -p1 +%patch74 -p1 +%patch75 -p1 +%patch76 -p1 +%patch77 -p1 +%patch78 -p1 +%patch79 -p1 +%patch81 -p1 +%patch82 -p1 +%patch83 -p1 +%patch84 -p1 +%patch114 -p1 # pending upstream merge -%patch131 -p1 -%patch132 -p1 +%patch130 -p1 +%patch140 -p1 %patch143 -p1 %patch145 -p1 %patch146 -p1 @@ -244,6 +273,9 @@ developing applications that use %{name}. %patch167 -p1 %patch168 -p1 %patch169 -p1 +%patch170 -p1 +%patch171 -p1 +%patch172 -p1 # version string %patch199 -p1 @@ -259,7 +291,7 @@ cd iscsiuio %{configure} cd .. cd utils/open-isns -%{configure} +%{configure} --with-security=no --with-slp=no cd ../.. %{__make} OPTFLAGS="%{optflags} %{?__global_ldflags} -DUSE_KMOD -lkmod" @@ -295,6 +327,7 @@ touch $RPM_BUILD_ROOT/var/lock/iscsi/lock %{__install} -d $RPM_BUILD_ROOT%{_unitdir} %{__install} -pm 644 etc/systemd/iscsi.service $RPM_BUILD_ROOT%{_unitdir} +%{__install} -pm 644 etc/systemd/iscsi-shutdown.service $RPM_BUILD_ROOT%{_unitdir} %{__install} -pm 644 etc/systemd/iscsid.service $RPM_BUILD_ROOT%{_unitdir} %{__install} -pm 644 etc/systemd/iscsid.socket $RPM_BUILD_ROOT%{_unitdir} %{__install} -pm 644 etc/systemd/iscsiuio.service $RPM_BUILD_ROOT%{_unitdir} @@ -323,7 +356,7 @@ touch $RPM_BUILD_ROOT/var/lock/iscsi/lock %post /sbin/ldconfig -%systemd_post iscsi.service iscsid.service iscsiuio.service iscsid.socket iscsiuio.socket +%systemd_post iscsi.service iscsi-shutdown.service iscsid.service iscsid.socket if [ $1 -eq 1 ]; then if [ ! -f %{_sysconfdir}/iscsi/initiatorname.iscsi ]; then @@ -332,16 +365,28 @@ if [ $1 -eq 1 ]; then # enable socket activation and persistant session startup by default /bin/systemctl enable iscsi.service >/dev/null 2>&1 || : /bin/systemctl enable iscsid.socket >/dev/null 2>&1 || : +fi + +%post iscsiuio +%systemd_post iscsiuio.service iscsiuio.socket + +if [ $1 -eq 1 ]; then /bin/systemctl enable iscsiuio.socket >/dev/null 2>&1 || : fi %preun -%systemd_preun iscsi.service iscsid.service iscsiuio.service iscsid.socket iscsiuio.socket +%systemd_preun iscsi.service iscsi-shutdown.service iscsid.service iscsiuio.service iscsid.socket iscsiuio.socket + +%preun iscsiuio +%systemd_preun iscsiuio.service iscsiuio.socket %postun /sbin/ldconfig %systemd_postun +%postun iscsiuio +%systemd_postun + %triggerun -- iscsi-initiator-utils < 6.2.0.873-1 # Save the current service runlevel info # User must manually run systemd-sysv-convert --apply iscsid @@ -360,6 +405,36 @@ fi /bin/systemctl try-restart iscsid.service >/dev/null 2>&1 || : /bin/systemctl try-restart iscsi.service >/dev/null 1>&1 || : +%triggerun iscsiuio -- iscsi-initiator-utils < 6.2.0.873-1 +# enable socket activation +/bin/systemctl enable iscsiuio.socket >/dev/null 2>&1 || : + +%triggerun -- iscsi-initiator-utils < 6.2.0.873-22 +# prior to 6.2.0.873-22 iscsi.service was missing a Wants=remote-fs-pre.target +# this forces remote-fs-pre.target active if needed for a clean shutdown/reboot +# after upgrading this package +if [ $1 -gt 0 ]; then + /usr/bin/systemctl -q is-active iscsi.service + if [ $? -eq 0 ]; then + /usr/bin/systemctl -q is-active remote-fs-pre.target + if [ $? -ne 0 ]; then + SRC=`/usr/bin/systemctl show --property FragmentPath remote-fs-pre.target | cut -d= -f2` + DST=/run/systemd/system/remote-fs-pre.target + if [ $SRC != $DST ]; then + cp $SRC $DST + fi + sed -i 's/RefuseManualStart=yes/RefuseManualStart=no/' $DST + /usr/bin/systemctl daemon-reload >/dev/null 2>&1 || : + /usr/bin/systemctl start remote-fs-pre.target >/dev/null 2>&1 || : + fi + fi +fi + +%triggerun -- iscsi-initiator-utils < 6.2.0.873-26 +if [ $1 -gt 0 ]; then + systemctl start iscsi-shutdown.service >/dev/null 2>&1 || : +fi + %files %doc README %dir %{_sharedstatedir}/iscsi @@ -372,6 +447,7 @@ fi %ghost %{_var}/lock/iscsi %ghost %{_var}/lock/iscsi/lock %{_unitdir}/iscsi.service +%{_unitdir}/iscsi-shutdown.service %{_unitdir}/iscsid.service %{_unitdir}/iscsid.socket %{_libexecdir}/iscsi-mark-root-nodes @@ -403,6 +479,35 @@ fi %{_includedir}/libiscsi.h %changelog +* Fri Jan 30 2015 Chris Leech - 6.2.0.873-29 +- 1166713 1187792 add missing ExecStart, only newer systemd lets that be optional for oneshot services + +* Thu Jan 15 2015 Chris Leech - 6.2.0.873-28 +- 1180100 scriptlets were never split out properly for the iscsiuio subpackage + +* Thu Jan 15 2015 Chris Leech - 6.2.0.873-27 +- 1168556 fix regression in network interface binding + +* Mon Jan 12 2015 Chris Leech - 6.2.0.873-26 +- 1166713 created iscsi-shutdown.service to ensure that session cleanup happens + +* Thu Dec 11 2014 Andy Grover - 6.2.0.873-25 +- Add --with-slp=no for #1088020 + +* Tue Nov 18 2014 Chris Leech - 6.2.0.873-24 +- 1040343 segfault from unexpected netlink event during discovery +- inhibit strict aliasing optimizations in iscsiuio, rpmdiff error + +* Tue Oct 21 2014 Chris Leech - 6.2.0.873-23 +- make sure to pass --with-security=no to isns configure (#1088020) + +* Wed Sep 24 2014 Chris Leech - 6.2.0.873-22 +- 1081798 retry login on host not found error +- 1111925 ignore iscsiadm return in iscsi.service +- 1126524 make sure systemd order against remote mounts is correct +- 963039 add discovery as a valid mode in iscsiadm.8 +- sync with upstream + * Tue Mar 18 2014 Chris Leech - 6.2.0.873-21 - 1069825 - boot session handling improvements