From nobody Fri Dec 17 10:03:52 2021 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 07ABA18F75CF; Fri, 17 Dec 2021 10:03:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4JFl1h606gz3t4G; Fri, 17 Dec 2021 10:03:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2A97919F1F; Fri, 17 Dec 2021 10:03:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1BHA3qS8052013; Fri, 17 Dec 2021 10:03:52 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1BHA3qNE052012; Fri, 17 Dec 2021 10:03:52 GMT (envelope-from git) Date: Fri, 17 Dec 2021 10:03:52 GMT Message-Id: <202112171003.1BHA3qNE052012@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Ram Kishore Vegesna Subject: git: d55873846cfc - stable/12 - ocs_fc: Fix CAM status reporting in ocs_fc(4) when no data is returned. List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ram X-Git-Repository: src X-Git-Refname: refs/heads/stable/12 X-Git-Reftype: branch X-Git-Commit: d55873846cfc218f96ab20b678bf0648e71124f8 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1639735433; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mEy5gxgDGh+vke0BNL19TOqzX5O7c135lnj5N+cwlpY=; b=sJ+mxCO7I8bc+d12LxOSC9KIsn2KFn7Me/2RCcz9gu+Bf83Wru5TT2pZiY1Bupm8S1FS8V t6Fsw+rejcuqsd/fkEi+SzTwF3LQ9wzwZ/4F8NNzPpzG6PWoZmsaB3GzOCImvGuPfZDPj6 tQmaPSn6eayd5aNR6F1nP3clEEYHRvTAK0ZXk0N+OUfnfHmG/iijor9Vf1asnWBoZrTp/D elx+TSCJZP0TEzr6rHIgn8JtAHpqQX7QfjYHd7vmCNa6w250d1BL0/1av1wWGZuPv+6wR4 tyleG09mXIJR0zfEDBJMl4Z0WkSJZvXMRRVjsSpIFI61KjYFRTdlO2guPPAEdQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1639735433; a=rsa-sha256; cv=none; b=r2uDc7AHURDUHMhAiKRkPf4q5YmMAmfIt07LwQsEAWN9RNFZbTR1wfs09WrNMqK7RFH2vZ 2ng2gBzKyvkglJo+r94jNenAag5NIwb3RIXeMv54crV7ZhH2JDEm3lE7A17M7p3ZhBNIZv 0kOy7lVg4819+mQ3BxmKWxV0mSYQdt+MlO1jTBBPA1CQUn7m2VRNfZYGDaZHGM2+dUCFFK cIsgosnEjNcRkv3O/Y9U6LEZGtWRziXUnIG9EtpClYwtvmkiDKPB4FGdGi8jeGoajX1jrE YjLWw7ycI0eryFz0jNy2De3rsCc+s2Wm2jFhZPHfMdZ8EPQ1DzyQ9g8dST2EHw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/12 has been updated by ram: URL: https://cgit.FreeBSD.org/src/commit/?id=d55873846cfc218f96ab20b678bf0648e71124f8 commit d55873846cfc218f96ab20b678bf0648e71124f8 Author: Ram Kishore Vegesna AuthorDate: 2021-09-24 09:19:49 +0000 Commit: Ram Kishore Vegesna CommitDate: 2021-12-17 09:57:49 +0000 ocs_fc: Fix CAM status reporting in ocs_fc(4) when no data is returned. In ocs_scsi_initiator_io_cb(), if the SCSI command that is getting completed had a residual equal to the transfer length, it was setting the CCB status to CAM_REQ_CMP. That breaks the expected behavior for commands like READ ATTRIBUTE. For READ ATTRIBUTE, if the first attribute requested doesn't exist, the command is supposed to return an error (Illegal Request, Invalid Field in CDB). The broken behavior for READ ATTRIBUTE caused LTFS tape formatting to fail. It looks for attribute 0x1623, and expects to see an error if the attribute isn't present. In addition, if the residual is negative (indicating an overrun), only set the CCB status to CAM_DATA_RUN_ERR if we have not already reported an error. The SCSI sense data will have more detail about what went wrong. sys/dev/ocs_fc/ocs_cam.c: In ocs_scsi_initiator_io_cb(), don't set the status to CAM_REQ_CMP if the residual is equal to the transfer length. Also, only set CAM_DATA_RUN_ERR if we didn't get SCSI status. Submitted by: ken@kdm.org Reviewed by: mav, ken (cherry picked from commit 1af49c2eeb4a05f524ed9a6657c741bc96fbaf87) --- sys/dev/ocs_fc/ocs_cam.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sys/dev/ocs_fc/ocs_cam.c b/sys/dev/ocs_fc/ocs_cam.c index 5f0d282477c9..e5862f093ed3 100644 --- a/sys/dev/ocs_fc/ocs_cam.c +++ b/sys/dev/ocs_fc/ocs_cam.c @@ -1488,18 +1488,18 @@ static int32_t ocs_scsi_initiator_io_cb(ocs_io_t *io, if (scsi_status == OCS_SCSI_STATUS_CHECK_RESPONSE) { csio->scsi_status = rsp->scsi_status; - if (SCSI_STATUS_OK != rsp->scsi_status) { + if (SCSI_STATUS_OK != rsp->scsi_status) ccb_status = CAM_SCSI_STATUS_ERROR; - } + else + ccb_status = CAM_REQ_CMP; csio->resid = rsp->residual; - if (rsp->residual > 0) { - uint32_t length = rsp->response_wire_length; - /* underflow */ - if (csio->dxfer_len == (length + csio->resid)) { - ccb_status = CAM_REQ_CMP; - } - } else if (rsp->residual < 0) { + + /* + * If we've already got a SCSI error, prefer that because it + * will have more detail. + */ + if ((rsp->residual < 0) && (ccb_status == CAM_REQ_CMP)) { ccb_status = CAM_DATA_RUN_ERR; }