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);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to