changeset 9934:a4bd03644408

6845097 panic in assertion: digest_choice != NULL during testing of iSER teststuite 6849720 iSCSI target panics during vdbench performance test from Windows 2008 initiator
author Priya Krishnan <Priya.Krishnan@Sun.COM>
date Mon, 22 Jun 2009 16:00:45 -0400
parents 24d797986369
children 41052599accc
files usr/src/uts/common/io/comstar/port/iscsit/iscsit.c usr/src/uts/common/io/ib/clients/iser/iser_idm.c
diffstat 2 files changed, 13 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/comstar/port/iscsit/iscsit.c	Mon Jun 22 12:41:29 2009 -0700
+++ b/usr/src/uts/common/io/comstar/port/iscsit/iscsit.c	Mon Jun 22 16:00:45 2009 -0400
@@ -1890,14 +1890,24 @@
 		    uint64_t, 0, uint32_t, 0, uint32_t, 0, /* no raddr */
 		    uint32_t, rx_pdu->isp_datalen, int, XFER_BUF_TX_TO_INI);
 
-		stmf_post_task(task, ibuf->ibuf_stmf_buf);
-
+		/*
+		 * For immediate data transfer, there is no callback from
+		 * stmf to indicate that the initial burst of data is
+		 * transferred successfully. In some cases, the task can
+		 * get freed before execution returns from stmf_post_task.
+		 * Although this xfer-start/done probe accurately tracks
+		 * the size of the transfer, it does only provide a best
+		 * effort on the timing of the transfer.
+		 */
 		DTRACE_ISCSI_8(xfer__done, idm_conn_t *, ic,
 		    uintptr_t, ibuf->ibuf_stmf_buf->db_sglist[0].seg_addr,
 		    uint32_t, ibuf->ibuf_stmf_buf->db_relative_offset,
 		    uint64_t, 0, uint32_t, 0, uint32_t, 0, /* no raddr */
 		    uint32_t, rx_pdu->isp_datalen, int, XFER_BUF_TX_TO_INI);
+
+		stmf_post_task(task, ibuf->ibuf_stmf_buf);
 	} else {
+
 		stmf_post_task(task, NULL);
 		idm_pdu_complete(rx_pdu, IDM_STATUS_SUCCESS);
 	}
--- a/usr/src/uts/common/io/ib/clients/iser/iser_idm.c	Mon Jun 22 12:41:29 2009 -0700
+++ b/usr/src/uts/common/io/ib/clients/iser/iser_idm.c	Mon Jun 22 16:00:45 2009 -0400
@@ -724,6 +724,7 @@
 		ASSERT(nvrc == 0);
 
 		if (strcasecmp(digest_choice_string, "none") == 0) {
+
 			/* Add to negotiated values list */
 			nvrc = nvlist_add_string(negotiated_nvl,
 			    ikvx->ik_key_name, digest_choice_string);
@@ -743,8 +744,6 @@
 		    digest_choice);
 	}
 
-	ASSERT(digest_choice != NULL);
-
 	return (kvrc);
 }