Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Feb 2017 05:22:58 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r313854 - head/sys/cam/ctl
Message-ID:  <201702170522.v1H5MwGK027647@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Fri Feb 17 05:22:58 2017
New Revision: 313854
URL: https://svnweb.freebsd.org/changeset/base/313854

Log:
  Change the way MaxCmdSN is used.
  
  Before this change MaxCmdSN was reported as CmdSN + delta, that made it
  limit number of requests in transmission from the initiator to target,
  that was pretty useless.  After this change MaxCmdSN limits number of
  requests queued to CTL, i.e. maximal queue depth for the initiator.
  The default limit is 256 outstanding requests per initiator at a time.
  
  This code uses existing cs_outstanding_ctl_pdus counter to track queue
  depth.  It's semantics doen't perfectly match, but close enough to not
  add another counter.  Just don't set the maxtags below 2.
  
  MFC after:	2 weeks

Modified:
  head/sys/cam/ctl/ctl_frontend_iscsi.c

Modified: head/sys/cam/ctl/ctl_frontend_iscsi.c
==============================================================================
--- head/sys/cam/ctl/ctl_frontend_iscsi.c	Fri Feb 17 05:09:51 2017	(r313853)
+++ head/sys/cam/ctl/ctl_frontend_iscsi.c	Fri Feb 17 05:22:58 2017	(r313854)
@@ -95,10 +95,9 @@ SYSCTL_INT(_kern_cam_ctl_iscsi, OID_AUTO
 static int login_timeout = 60;
 SYSCTL_INT(_kern_cam_ctl_iscsi, OID_AUTO, login_timeout, CTLFLAG_RWTUN,
     &login_timeout, 60, "Time to wait for ctld(8) to finish Login Phase, in seconds");
-static int maxcmdsn_delta = 256;
-SYSCTL_INT(_kern_cam_ctl_iscsi, OID_AUTO, maxcmdsn_delta, CTLFLAG_RWTUN,
-    &maxcmdsn_delta, 256, "Number of commands the initiator can send "
-    "without confirmation");
+static int maxtags = 256;
+SYSCTL_INT(_kern_cam_ctl_iscsi, OID_AUTO, maxtags, CTLFLAG_RWTUN,
+    &maxtags, 0, "Max number of requests queued by initiator");
 
 #define	CFISCSI_DEBUG(X, ...)						\
 	do {								\
@@ -244,7 +243,7 @@ cfiscsi_pdu_update_cmdsn(const struct ic
 		 * outside of this range.
 		 */
 		if (ISCSI_SNLT(cmdsn, cs->cs_cmdsn) ||
-		    ISCSI_SNGT(cmdsn, cs->cs_cmdsn + maxcmdsn_delta)) {
+		    ISCSI_SNGT(cmdsn, cs->cs_cmdsn - 1 + maxtags)) {
 			CFISCSI_SESSION_UNLOCK(cs);
 			CFISCSI_SESSION_WARN(cs, "received PDU with CmdSN %u, "
 			    "while expected %u", cmdsn, cs->cs_cmdsn);
@@ -399,7 +398,8 @@ cfiscsi_pdu_prepare(struct icl_pdu *resp
 	    (bhssr->bhssr_flags & BHSDI_FLAGS_S))
 		bhssr->bhssr_statsn = htonl(cs->cs_statsn);
 	bhssr->bhssr_expcmdsn = htonl(cs->cs_cmdsn);
-	bhssr->bhssr_maxcmdsn = htonl(cs->cs_cmdsn + maxcmdsn_delta);
+	bhssr->bhssr_maxcmdsn = htonl(cs->cs_cmdsn - 1 +
+	    imax(0, maxtags - cs->cs_outstanding_ctl_pdus));
 
 	if (advance_statsn)
 		cs->cs_statsn++;



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