Blame iscsi-initiator-utils-fix-zero-MaxXmitDataSegmentLength.patch

mchristi e6af555
diff -aurp open-iscsi-2.0-872-rc1-bnx2i/usr/be2iscsi.c open-iscsi-2.0-872-rc1-bnx2i.work/usr/be2iscsi.c
mchristi e6af555
--- open-iscsi-2.0-872-rc1-bnx2i/usr/be2iscsi.c	2010-04-16 14:15:44.000000000 -0500
mchristi e6af555
+++ open-iscsi-2.0-872-rc1-bnx2i.work/usr/be2iscsi.c	2010-04-16 14:17:00.000000000 -0500
mchristi e6af555
@@ -18,6 +18,9 @@
mchristi e6af555
 
mchristi e6af555
 void be2iscsi_create_conn(struct iscsi_conn *conn)
mchristi e6af555
 {
mchristi e6af555
+	struct iscsi_session *session = conn->session;
mchristi e6af555
+	conn_rec_t *conn_rec = &session->nrec.conn[conn->id];
mchristi e6af555
+
mchristi e6af555
 	if (conn->max_recv_dlength > 65536)
mchristi e6af555
 		conn->max_recv_dlength = 65536;
mchristi e6af555
 
mchristi e6af555
@@ -30,5 +33,9 @@ void be2iscsi_create_conn(struct iscsi_c
mchristi e6af555
 	if (conn->max_xmit_dlength > 65536)
mchristi e6af555
 		conn->max_xmit_dlength = 65536;
mchristi e6af555
 
mchristi e6af555
+	if (!conn_rec->iscsi.MaxXmitDataSegmentLength ||
mchristi e6af555
+	    conn_rec->iscsi.MaxXmitDataSegmentLength > 65536)
mchristi e6af555
+		conn_rec->iscsi.MaxXmitDataSegmentLength = 65536;
mchristi e6af555
+
mchristi e6af555
 	conn->session->erl = 0;
mchristi e6af555
 }
mchristi e6af555
diff -aurp open-iscsi-2.0-872-rc1-bnx2i/usr/initiator.c open-iscsi-2.0-872-rc1-bnx2i.work/usr/initiator.c
mchristi e6af555
--- open-iscsi-2.0-872-rc1-bnx2i/usr/initiator.c	2010-04-16 14:16:30.000000000 -0500
mchristi e6af555
+++ open-iscsi-2.0-872-rc1-bnx2i.work/usr/initiator.c	2010-04-16 14:16:41.000000000 -0500
mchristi e6af555
@@ -369,9 +369,10 @@ iscsi_copy_operational_params(iscsi_conn
mchristi 7d97f77
 	/* zero indicates to use the target's value */
mchristi 7d97f77
 	conn->max_xmit_dlength =
mchristi 7d97f77
 			__padding(conn_rec->iscsi.MaxXmitDataSegmentLength);
mchristi 7d97f77
-	if (conn->max_xmit_dlength != 0 &&
mchristi 7d97f77
-	    (conn->max_xmit_dlength < ISCSI_MIN_MAX_RECV_SEG_LEN ||
mchristi 7d97f77
-	     conn->max_xmit_dlength > ISCSI_MAX_MAX_RECV_SEG_LEN)) {
mchristi 7d97f77
+	if (conn->max_xmit_dlength == 0)
mchristi 7d97f77
+		conn->max_xmit_dlength = ISCSI_DEF_MAX_RECV_SEG_LEN;
mchristi 7d97f77
+	if (conn->max_xmit_dlength < ISCSI_MIN_MAX_RECV_SEG_LEN ||
mchristi 7d97f77
+	    conn->max_xmit_dlength > ISCSI_MAX_MAX_RECV_SEG_LEN) {
mchristi 7d97f77
 		log_error("Invalid iscsi.MaxXmitDataSegmentLength. Must be "
mchristi 7d97f77
 			 "within %u and %u. Setting to %u\n",
mchristi 7d97f77
 			  ISCSI_MIN_MAX_RECV_SEG_LEN,
mchristi e6af555
diff -aurp open-iscsi-2.0-872-rc1-bnx2i/usr/login.c open-iscsi-2.0-872-rc1-bnx2i.work/usr/login.c
mchristi e6af555
--- open-iscsi-2.0-872-rc1-bnx2i/usr/login.c	2010-04-16 14:16:30.000000000 -0500
mchristi e6af555
+++ open-iscsi-2.0-872-rc1-bnx2i.work/usr/login.c	2010-04-16 14:16:41.000000000 -0500
mchristi e6af555
@@ -390,9 +390,14 @@ get_op_params_text_keys(iscsi_session_t 
mchristi 7d97f77
 		if (session->type == ISCSI_SESSION_TYPE_DISCOVERY ||
mchristi 7d97f77
 		    !session->t->template->rdma) {
mchristi 7d97f77
 			int tgt_max_xmit;
mchristi 7d97f77
+			conn_rec_t *conn_rec = &session->nrec.conn[cid];
mchristi 7d97f77
 
mchristi 7d97f77
 			tgt_max_xmit = strtoul(value, NULL, 0);
mchristi 7d97f77
-			if (conn->max_xmit_dlength == 0 ||
mchristi 7d97f77
+			/*
mchristi 7d97f77
+			 * if the rec value is zero it means to use
mchristi 7d97f77
+			 * what the target gave us.
mchristi 7d97f77
+			 */
mchristi 7d97f77
+			if (!conn_rec->iscsi.MaxXmitDataSegmentLength ||
mchristi 7d97f77
 			    tgt_max_xmit < conn->max_xmit_dlength)
mchristi 7d97f77
 				conn->max_xmit_dlength = tgt_max_xmit;
mchristi 7d97f77
 		}