Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Dec 2015 02:35:59 +0000 (UTC)
From:      Navdeep Parhar <np@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r292679 - head/sys/dev/iscsi
Message-ID:  <201512240235.tBO2ZxH3071898@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: np
Date: Thu Dec 24 02:35:59 2015
New Revision: 292679
URL: https://svnweb.freebsd.org/changeset/base/292679

Log:
  MFP r291227, r291228, and r292618.
  
  r291227:
  s/is->is_conn/ic to shorten things a bit.
  
  r291228:
  Do not generate PDUs with payload greater than max_data_segment_length.
  
  It is perhaps preferable to have a separate limit for send instead of
  reusing the receive limit.  I'll discuss with trasz@ and mav@ before
  pulling this into head.
  
  r292618:
  Add comment to go with r291228.

Modified:
  head/sys/dev/iscsi/iscsi.c
Directory Properties:
  head/   (props changed)
  head/sys/   (props changed)

Modified: head/sys/dev/iscsi/iscsi.c
==============================================================================
--- head/sys/dev/iscsi/iscsi.c	Thu Dec 24 02:02:05 2015	(r292678)
+++ head/sys/dev/iscsi/iscsi.c	Thu Dec 24 02:35:59 2015	(r292679)
@@ -1329,6 +1329,7 @@ iscsi_ioctl_daemon_handoff(struct iscsi_
     struct iscsi_daemon_handoff *handoff)
 {
 	struct iscsi_session *is;
+	struct icl_conn *ic;
 	int error;
 
 	sx_slock(&sc->sc_lock);
@@ -1345,6 +1346,7 @@ iscsi_ioctl_daemon_handoff(struct iscsi_
 		return (ESRCH);
 	}
 	ISCSI_SESSION_LOCK(is);
+	ic = is->is_conn;
 	if (is->is_conf.isc_discovery || is->is_terminating) {
 		ISCSI_SESSION_UNLOCK(is);
 		sx_sunlock(&sc->sc_lock);
@@ -1369,18 +1371,24 @@ iscsi_ioctl_daemon_handoff(struct iscsi_
 	is->is_statsn = handoff->idh_statsn;
 	is->is_initial_r2t = handoff->idh_initial_r2t;
 	is->is_immediate_data = handoff->idh_immediate_data;
-	is->is_max_data_segment_length = handoff->idh_max_data_segment_length;
+
+	/*
+	 * Cap MaxRecvDataSegmentLength obtained from the target to the maximum
+	 * size supported by our ICL module.
+	 */
+	is->is_max_data_segment_length = min(ic->ic_max_data_segment_length,
+	    handoff->idh_max_data_segment_length);
 	is->is_max_burst_length = handoff->idh_max_burst_length;
 	is->is_first_burst_length = handoff->idh_first_burst_length;
 
 	if (handoff->idh_header_digest == ISCSI_DIGEST_CRC32C)
-		is->is_conn->ic_header_crc32c = true;
+		ic->ic_header_crc32c = true;
 	else
-		is->is_conn->ic_header_crc32c = false;
+		ic->ic_header_crc32c = false;
 	if (handoff->idh_data_digest == ISCSI_DIGEST_CRC32C)
-		is->is_conn->ic_data_crc32c = true;
+		ic->ic_data_crc32c = true;
 	else
-		is->is_conn->ic_data_crc32c = false;
+		ic->ic_data_crc32c = false;
 
 	is->is_cmdsn = 0;
 	is->is_expcmdsn = 0;
@@ -1399,7 +1407,7 @@ iscsi_ioctl_daemon_handoff(struct iscsi_
 		/*
 		 * Handoff without using ICL proxy.
 		 */
-		error = icl_conn_handoff(is->is_conn, handoff->idh_socket);
+		error = icl_conn_handoff(ic, handoff->idh_socket);
 		if (error != 0) {
 			sx_sunlock(&sc->sc_lock);
 			iscsi_session_terminate(is);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201512240235.tBO2ZxH3071898>