summaryrefslogtreecommitdiffstats
path: root/sys/cam
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2017-03-03 06:06:27 +0000
committermav <mav@FreeBSD.org>2017-03-03 06:06:27 +0000
commit16ccfd4c1ce12408b87af2134adaf98ec62866b5 (patch)
tree6015603104db337dbd026e3edd98bb98be7d885d /sys/cam
parent4e3f624a33579296dccb61beaebc3a2ae95df6a7 (diff)
downloadFreeBSD-src-16ccfd4c1ce12408b87af2134adaf98ec62866b5.zip
FreeBSD-src-16ccfd4c1ce12408b87af2134adaf98ec62866b5.tar.gz
MFC r313854, r313963: 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.
Diffstat (limited to 'sys/cam')
-rw-r--r--sys/cam/ctl/ctl_frontend_iscsi.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/cam/ctl/ctl_frontend_iscsi.c b/sys/cam/ctl/ctl_frontend_iscsi.c
index 72580e9..bd85576 100644
--- a/sys/cam/ctl/ctl_frontend_iscsi.c
+++ b/sys/cam/ctl/ctl_frontend_iscsi.c
@@ -95,10 +95,9 @@ SYSCTL_INT(_kern_cam_ctl_iscsi, OID_AUTO, ping_timeout, CTLFLAG_RWTUN,
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 icl_pdu *request)
* 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 *response)
(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++;
OpenPOWER on IntegriCloud