Linux s390 Architecture development
 help / color / mirror / Atom feed
From: Damien Le Moal <dlemoal@kernel.org>
To: "Martin K . Petersen" <martin.petersen@oracle.com>,
	"James E . J . Bottomley" <James.Bottomley@HansenPartnership.com>,
	linux-scsi@vger.kernel.org, linux-ide@vger.kernel.org,
	Niklas Cassel <cassel@kernel.org>,
	linux-usb@vger.kernel.org, Alan Stern <stern@rowland.harvard.edu>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-s390@vger.kernel.org, Heiko Carstens <hca@linux.ibm.com>
Subject: [PATCH v5 24/40] scsi: qla2xxx: use 16-bits defined sense codes
Date: Mon,  7 Sep 2026 11:43:27 +0900	[thread overview]
Message-ID: <20260907024343.1046387-25-dlemoal@kernel.org> (raw)
In-Reply-To: <20260907024343.1046387-1-dlemoal@kernel.org>

Refactor the qla2xxx driver to use scsi_set_sense() and replace all
hard-coded additional sense codes and additional sense code qualifiers
with the enum values defined in include/scsi/scsi_sense.h. This helps with
code clarity as the sense codes being processed are easier to test and
self-documented.

While at it, the declaration function qlt_send_resp_ctio(), which is
modified to take a single 16-bits sense code argument, is changed to a
static function declaration since that function is used only in the file
where it is defined.

No functional change intended.

Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
---
 drivers/scsi/qla2xxx/qla_isr.c    |  9 ++-
 drivers/scsi/qla2xxx/qla_target.c | 99 ++++++++++++++++---------------
 drivers/scsi/qla2xxx/qla_target.h |  3 -
 3 files changed, 57 insertions(+), 54 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 63b70d4abbf0..89c2af3fee4f 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -3263,21 +3263,24 @@ qla2x00_handle_dif_error(srb_t *sp, void *pkt)
 
 	/* check guard */
 	if (e_guard != a_guard) {
-		scsi_build_sense(cmd, 1, ILLEGAL_REQUEST, 0x10, 0x1);
+		scsi_set_sense(cmd, 1, ILLEGAL_REQUEST,
+			       LOGICAL_BLOCK_GUARD_CHECK_FAILED);
 		set_host_byte(cmd, DID_ABORT);
 		return 1;
 	}
 
 	/* check ref tag */
 	if (e_ref_tag != a_ref_tag) {
-		scsi_build_sense(cmd, 1, ILLEGAL_REQUEST, 0x10, 0x3);
+		scsi_set_sense(cmd, 1, ILLEGAL_REQUEST,
+			       LOGICAL_BLOCK_REFERENCE_TAG_CHECK_FAILED);
 		set_host_byte(cmd, DID_ABORT);
 		return 1;
 	}
 
 	/* check appl tag */
 	if (e_app_tag != a_app_tag) {
-		scsi_build_sense(cmd, 1, ILLEGAL_REQUEST, 0x10, 0x2);
+		scsi_set_sense(cmd, 1, ILLEGAL_REQUEST,
+			       LOGICAL_BLOCK_APPLICATION_TAG_CHECK_FAILED);
 		set_host_byte(cmd, DID_ABORT);
 		return 1;
 	}
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 53a505df8da0..431a59d499b3 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -2243,18 +2243,20 @@ void qlt_free_ul_mcmd(struct qla_hw_data *ha, struct qla_tgt_mgmt_cmd *mcmd)
  * ha->hardware_lock supposed to be held on entry. Might drop it, then
  * reacquire
  */
-void qlt_send_resp_ctio(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd,
-    uint8_t scsi_status, uint8_t sense_key, uint8_t asc, uint8_t ascq)
+static void qlt_send_resp_ctio(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd,
+    uint8_t scsi_status, uint8_t sense_key, uint16_t sense_code)
 {
 	struct atio_from_isp *atio = &cmd->atio;
 	struct ctio7_to_24xx *ctio;
 	uint16_t temp;
 	struct scsi_qla_host *vha = cmd->vha;
+	uint8_t asc = scsi_sense_code_asc(sense_code);
+	uint8_t ascq = scsi_sense_code_ascq(sense_code);
 
 	ql_dbg(ql_dbg_tgt_dif, vha, 0x3066,
 	    "Sending response CTIO7 (vha=%p, atio=%p, scsi_status=%02x, "
 	    "sense_key=%02x, asc=%02x, ascq=%02x",
-	    vha, atio, scsi_status, sense_key, asc, ascq);
+	       vha, atio, scsi_status, sense_key, asc, ascq);
 
 	ctio = (struct ctio7_to_24xx *)qla2x00_alloc_iocbs(vha, NULL);
 	if (!ctio) {
@@ -2677,44 +2679,47 @@ static void qlt_print_dif_err(struct qla_tgt_prm *prm)
 {
 	struct qla_tgt_cmd *cmd;
 	struct scsi_qla_host *vha;
+	u16 scode;
 
 	/* asc 0x10=dif error */
-	if (prm->sense_buffer && (prm->sense_buffer[12] == 0x10)) {
-		cmd = prm->cmd;
-		vha = cmd->vha;
-		/* ASCQ */
-		switch (prm->sense_buffer[13]) {
-		case 1:
-			ql_dbg(ql_dbg_tgt_dif, vha, 0xe00b,
-			    "BE detected Guard TAG ERR: lba[0x%llx|%lld] len[0x%x] "
-			    "se_cmd=%p tag[%x]",
-			    cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd,
-			    cmd->atio.u.isp24.exchange_addr);
-			break;
-		case 2:
-			ql_dbg(ql_dbg_tgt_dif, vha, 0xe00c,
-			    "BE detected APP TAG ERR: lba[0x%llx|%lld] len[0x%x] "
-			    "se_cmd=%p tag[%x]",
-			    cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd,
-			    cmd->atio.u.isp24.exchange_addr);
-			break;
-		case 3:
-			ql_dbg(ql_dbg_tgt_dif, vha, 0xe00f,
-			    "BE detected REF TAG ERR: lba[0x%llx|%lld] len[0x%x] "
-			    "se_cmd=%p tag[%x]",
-			    cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd,
-			    cmd->atio.u.isp24.exchange_addr);
-			break;
-		default:
-			ql_dbg(ql_dbg_tgt_dif, vha, 0xe010,
-			    "BE detected Dif ERR: lba[%llx|%lld] len[%x] "
-			    "se_cmd=%p tag[%x]",
-			    cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd,
-			    cmd->atio.u.isp24.exchange_addr);
-			break;
-		}
-		ql_dump_buffer(ql_dbg_tgt_dif, vha, 0xe011, cmd->cdb, 16);
+	if (!prm->sense_buffer ||
+	    prm->sense_buffer[12] != ASC_ID_CRC_OR_ECC_ERROR)
+		return;
+
+	cmd = prm->cmd;
+	vha = cmd->vha;
+	scode = scsi_sense_code(prm->sense_buffer[12], prm->sense_buffer[13]);
+	switch (scode) {
+	case LOGICAL_BLOCK_GUARD_CHECK_FAILED:
+		ql_dbg(ql_dbg_tgt_dif, vha, 0xe00b,
+		       "BE detected Guard TAG ERR: lba[0x%llx|%lld] len[0x%x] "
+		       "se_cmd=%p tag[%x]",
+		       cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd,
+		       cmd->atio.u.isp24.exchange_addr);
+		break;
+	case LOGICAL_BLOCK_APPLICATION_TAG_CHECK_FAILED:
+		ql_dbg(ql_dbg_tgt_dif, vha, 0xe00c,
+		       "BE detected APP TAG ERR: lba[0x%llx|%lld] len[0x%x] "
+		       "se_cmd=%p tag[%x]",
+		       cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd,
+		       cmd->atio.u.isp24.exchange_addr);
+		break;
+	case LOGICAL_BLOCK_REFERENCE_TAG_CHECK_FAILED:
+		ql_dbg(ql_dbg_tgt_dif, vha, 0xe00f,
+		       "BE detected REF TAG ERR: lba[0x%llx|%lld] len[0x%x] "
+		       "se_cmd=%p tag[%x]",
+		       cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd,
+		       cmd->atio.u.isp24.exchange_addr);
+		break;
+	default:
+		ql_dbg(ql_dbg_tgt_dif, vha, 0xe010,
+		       "BE detected Dif ERR: lba[%llx|%lld] len[%x] "
+		       "se_cmd=%p tag[%x]",
+		       cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd,
+		       cmd->atio.u.isp24.exchange_addr);
+		break;
 	}
+	ql_dump_buffer(ql_dbg_tgt_dif, vha, 0xe011, cmd->cdb, 16);
 }
 
 /*
@@ -3467,7 +3472,8 @@ qlt_handle_dif_error(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd,
 	uint8_t		*ap = &sts->actual_dif[0];
 	uint8_t		*ep = &sts->expected_dif[0];
 	uint64_t	lba = cmd->se_cmd.t_task_lba;
-	uint8_t scsi_status, sense_key, asc, ascq;
+	uint8_t scsi_status, sense_key;
+	uint16_t sense_code = 0;
 	struct scsi_qla_host *vha = cmd->vha;
 
 	cmd->trc_flags |= TRC_DIF_ERR;
@@ -3483,7 +3489,7 @@ qlt_handle_dif_error(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd,
 	ql_dbg(ql_dbg_tgt_dif, vha, 0xf075,
 	    "%s: aborted %d state %d\n", __func__, cmd->aborted, cmd->state);
 
-	scsi_status = sense_key = asc = ascq = 0;
+	scsi_status = sense_key = 0;
 
 	/* check appl tag */
 	if (cmd->e_app_tag != cmd->a_app_tag) {
@@ -3497,8 +3503,7 @@ qlt_handle_dif_error(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd,
 		cmd->dif_err_code = DIF_ERR_APP;
 		scsi_status = SAM_STAT_CHECK_CONDITION;
 		sense_key = ABORTED_COMMAND;
-		asc = 0x10;
-		ascq = 0x2;
+		sense_code = LOGICAL_BLOCK_APPLICATION_TAG_CHECK_FAILED;
 	}
 
 	/* check ref tag */
@@ -3513,8 +3518,7 @@ qlt_handle_dif_error(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd,
 		cmd->dif_err_code = DIF_ERR_REF;
 		scsi_status = SAM_STAT_CHECK_CONDITION;
 		sense_key = ABORTED_COMMAND;
-		asc = 0x10;
-		ascq = 0x3;
+		sense_code = LOGICAL_BLOCK_REFERENCE_TAG_CHECK_FAILED;
 		goto out;
 	}
 
@@ -3530,8 +3534,7 @@ qlt_handle_dif_error(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd,
 		cmd->dif_err_code = DIF_ERR_GRD;
 		scsi_status = SAM_STAT_CHECK_CONDITION;
 		sense_key = ABORTED_COMMAND;
-		asc = 0x10;
-		ascq = 0x1;
+		sense_code = LOGICAL_BLOCK_GUARD_CHECK_FAILED;
 	}
 out:
 	switch (cmd->state) {
@@ -3547,8 +3550,8 @@ qlt_handle_dif_error(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd,
 			break;
 		}
 
-		qlt_send_resp_ctio(qpair, cmd, scsi_status, sense_key, asc,
-		    ascq);
+		qlt_send_resp_ctio(qpair, cmd, scsi_status, sense_key,
+				   sense_code);
 		/* assume scsi status gets out on the wire.
 		 * Will not wait for completion.
 		 */
diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h
index 61072fb41b29..71bc1affb1bc 100644
--- a/drivers/scsi/qla2xxx/qla_target.h
+++ b/drivers/scsi/qla2xxx/qla_target.h
@@ -1178,7 +1178,4 @@ extern irqreturn_t qla83xx_msix_atio_q(int, void *);
 extern void qlt_logo_completion_handler(fc_port_t *, int);
 extern void qlt_do_generation_tick(struct scsi_qla_host *, int *);
 
-void qlt_send_resp_ctio(struct qla_qpair *, struct qla_tgt_cmd *, uint8_t,
-    uint8_t, uint8_t, uint8_t);
-
 #endif /* __QLA_TARGET_H */
-- 
2.55.0


  parent reply	other threads:[~2026-09-07  2:44 UTC|newest]

Thread overview: 112+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-07  2:43 [PATCH v5 00/40] Use defined 16-bits ASC/ASCQ combinations Damien Le Moal
2026-09-07  2:43 ` [PATCH v5 01/40] scsi: define all additional sense codes and their qualifiers Damien Le Moal
2026-09-07  3:14   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 02/40] scsi: constants: use defined sense codes Damien Le Moal
2026-09-07  2:51   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 03/40] scsi: constants: rename internal struct field names Damien Le Moal
2026-09-07  2:48   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 04/40] scsi: rename sense field of struct scsi_failure Damien Le Moal
2026-09-07  2:54   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 05/40] scsi: prepare for using 16-bits defined sense codes Damien Le Moal
2026-09-07  2:54   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 06/40] scsi: use struct scsi_sense_hdr to log sense keys and codes Damien Le Moal
2026-09-07  2:52   ` sashiko-bot
2026-09-07 20:05   ` Bart Van Assche
2026-09-08  0:32     ` Damien Le Moal
2026-09-07  2:43 ` [PATCH v5 07/40] scsi: core: use 16-bits defined sense codes Damien Le Moal
2026-09-07  2:54   ` sashiko-bot
2026-09-07 20:03   ` Bart Van Assche
2026-09-08  0:32     ` Damien Le Moal
2026-09-07  2:43 ` [PATCH v5 08/40] scsi: sd: " Damien Le Moal
2026-09-07  3:11   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 09/40] scsi: sr: " Damien Le Moal
2026-09-07  2:54   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 10/40] scsi: ses: " Damien Le Moal
2026-09-07  2:56   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 11/40] scsi: ch: " Damien Le Moal
2026-09-07  2:54   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 12/40] scsi: st: " Damien Le Moal
2026-09-07  2:57   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 13/40] scsi: device_handlers: hp_sw: " Damien Le Moal
2026-09-07  2:50   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 14/40] scsi: device_handlers: rdac: " Damien Le Moal
2026-09-07  2:52   ` sashiko-bot
2026-09-07 14:11   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 15/40] scsi: device_handlers: emc: " Damien Le Moal
2026-09-07  3:02   ` sashiko-bot
2026-09-07 14:13   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 16/40] scsi: device_handlers: alua: " Damien Le Moal
2026-09-07  2:57   ` sashiko-bot
2026-09-07 14:21   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 17/40] scsi: mpt3sas: " Damien Le Moal
2026-09-07  2:55   ` sashiko-bot
2026-09-07 14:28   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 18/40] scsi: mpi3mr: " Damien Le Moal
2026-09-07  2:55   ` sashiko-bot
2026-09-07 14:30   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 19/40] scsi: 3w-xxxx: " Damien Le Moal
2026-09-07  2:58   ` sashiko-bot
2026-09-07 14:39   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 20/40] scsi: leapraid: " Damien Le Moal
2026-09-07  3:00   ` sashiko-bot
2026-09-07 14:48   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 21/40] scsi: megaraid: " Damien Le Moal
2026-09-07  2:56   ` sashiko-bot
2026-09-07 14:50   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 22/40] scsi: myrX: " Damien Le Moal
2026-09-07  2:59   ` sashiko-bot
2026-09-07 14:54   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 23/40] scsi: smartpqi: " Damien Le Moal
2026-09-07  2:57   ` sashiko-bot
2026-09-07 14:57   ` Johannes Thumshirn
2026-09-07  2:43 ` Damien Le Moal [this message]
2026-09-07  2:58   ` [PATCH v5 24/40] scsi: qla2xxx: " sashiko-bot
2026-09-07  2:43 ` [PATCH v5 25/40] scsi: ps3rom: " Damien Le Moal
2026-09-07  3:03   ` sashiko-bot
2026-09-07 15:25   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 26/40] scsi: lpfc: " Damien Le Moal
2026-09-07  3:02   ` sashiko-bot
2026-09-07 15:26   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 27/40] scsi: stex: " Damien Le Moal
2026-09-07  3:04   ` sashiko-bot
2026-09-07 15:26   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 28/40] scsi: mvumi: " Damien Le Moal
2026-09-07  3:03   ` sashiko-bot
2026-09-07 15:29   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 29/40] scsi: libiscsi: " Damien Le Moal
2026-09-07  3:03   ` sashiko-bot
2026-09-07 15:29   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 30/40] scsi: ibmvscsi_tgt: " Damien Le Moal
2026-09-07  3:05   ` sashiko-bot
2026-09-07 15:32   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 31/40] scsi: scsi_debug: " Damien Le Moal
2026-09-07  3:12   ` sashiko-bot
2026-09-07 15:41   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 32/40] scsi: hpsa: " Damien Le Moal
2026-09-07  3:03   ` sashiko-bot
2026-09-07 15:57   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 33/40] scsi: storvsc: " Damien Le Moal
2026-09-07  3:06   ` sashiko-bot
2026-09-07 15:59   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 34/40] target: " Damien Le Moal
2026-09-07  3:11   ` sashiko-bot
2026-09-07  2:43 ` [PATCH v5 35/40] usb: storage: " Damien Le Moal
2026-09-07  3:02   ` sashiko-bot
2026-09-07 16:13   ` Johannes Thumshirn
2026-09-08  0:27     ` Damien Le Moal
2026-09-08  1:20       ` Alan Stern
2026-09-07  2:43 ` [PATCH v5 36/40] cdrom: " Damien Le Moal
2026-09-07  3:03   ` sashiko-bot
2026-09-07 16:21   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 37/40] ata: libata: " Damien Le Moal
2026-09-07  3:04   ` sashiko-bot
2026-09-07 16:21   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 38/40] s390: scsi: " Damien Le Moal
2026-09-07  3:09   ` sashiko-bot
2026-09-07 16:25   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 39/40] scsi: cleanup scsi_proto.h Damien Le Moal
2026-09-07  3:07   ` sashiko-bot
2026-09-07 16:45   ` Johannes Thumshirn
2026-09-07  2:43 ` [PATCH v5 40/40] scsi: remove scsi_build_sense() and scsi_build_sense_buffer() Damien Le Moal
2026-09-07  3:02   ` sashiko-bot
2026-09-07 16:57   ` Johannes Thumshirn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260907024343.1046387-25-dlemoal@kernel.org \
    --to=dlemoal@kernel.org \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=cassel@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=hca@linux.ibm.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox