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>
Subject: [PATCH 31/37] scsi: scsi_debug: use 16-bits defined sense codes
Date: Mon, 31 Aug 2026 11:04:45 +0900 [thread overview]
Message-ID: <20260831020451.585944-32-dlemoal@kernel.org> (raw)
In-Reply-To: <20260831020451.585944-1-dlemoal@kernel.org>
Refactor the scsi_debug driver to replace 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.
The functions mk_sense_buffer() and mk_sense_info_tape() are modified to
take a 16-bits sense code as argument.
No functional change intended.
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
---
drivers/scsi/scsi_debug.c | 332 ++++++++++++++++++++------------------
1 file changed, 171 insertions(+), 161 deletions(-)
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 3346562275f8..b723f0334b42 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -67,9 +67,6 @@ static const char *sdebug_version_date = "20210520";
#define MY_NAME "scsi_debug"
-/* Additional Sense Code Qualifier (ASCQ) */
-#define ACK_NAK_TO 0x3
-
/* Default values for driver parameters */
#define DEF_NUM_HOST 1
#define DEF_NUM_TGTS 1
@@ -1320,9 +1317,13 @@ static void mk_sense_invalid_fld(struct scsi_cmnd *scp,
sdev_printk(KERN_ERR, scp->device, "sense_buffer is NULL\n");
return;
}
- asc = c_d ? INVALID_FIELD_IN_CDB : INVALID_FIELD_IN_PARAM_LIST;
+ if (c_d)
+ asc = ASC_INVALID_FIELD_IN_CDB;
+ else
+ asc = ASC_INVALID_FIELD_IN_PARAMETER_LIST;
memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
- scsi_build_sense(scp, sdebug_dsense, ILLEGAL_REQUEST, asc, 0);
+ scsi_set_sense(scp, sdebug_dsense, ILLEGAL_REQUEST,
+ scsi_sense_code(asc, 0));
memset(sks, 0, sizeof(sks));
sks[0] = 0x80;
if (c_d)
@@ -1346,7 +1347,7 @@ static void mk_sense_invalid_fld(struct scsi_cmnd *scp,
my_name, asc, c_d ? 'C' : 'D', in_byte, in_bit);
}
-static void mk_sense_buffer(struct scsi_cmnd *scp, int key, int asc, int asq)
+static void mk_sense_buffer(struct scsi_cmnd *scp, u8 key, u16 code)
{
if (!scp->sense_buffer) {
sdev_printk(KERN_ERR, scp->device, "sense_buffer is NULL\n");
@@ -1354,16 +1355,16 @@ static void mk_sense_buffer(struct scsi_cmnd *scp, int key, int asc, int asq)
}
memset(scp->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
- scsi_build_sense(scp, sdebug_dsense, key, asc, asq);
+ scsi_set_sense(scp, sdebug_dsense, key, code);
if (sdebug_verbose)
sdev_printk(KERN_INFO, scp->device,
- "%s: [sense_key,asc,ascq]: [0x%x,0x%x,0x%x]\n",
- my_name, key, asc, asq);
+ "%s: [sense_key,sense_code]: [0x%02x,0x%04x]\n",
+ my_name, key, code);
}
/* Sense data that has information fields for tapes */
-static void mk_sense_info_tape(struct scsi_cmnd *scp, int key, int asc, int asq,
+static void mk_sense_info_tape(struct scsi_cmnd *scp, u8 key, u16 code,
unsigned int information, unsigned char tape_flags)
{
if (!scp->sense_buffer) {
@@ -1372,7 +1373,7 @@ static void mk_sense_info_tape(struct scsi_cmnd *scp, int key, int asc, int asq,
}
memset(scp->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
- scsi_build_sense(scp, /* sdebug_dsense */ 0, key, asc, asq);
+ scsi_set_sense(scp, /* sdebug_dsense */ 0, key, code);
/* only fixed format so far */
scp->sense_buffer[0] |= 0x80; /* valid */
@@ -1381,13 +1382,13 @@ static void mk_sense_info_tape(struct scsi_cmnd *scp, int key, int asc, int asq,
if (sdebug_verbose)
sdev_printk(KERN_INFO, scp->device,
- "%s: [sense_key,asc,ascq]: [0x%x,0x%x,0x%x]\n",
- my_name, key, asc, asq);
+ "%s: [sense_key,sense_code]: [0x%02x,0x%04x]\n",
+ my_name, key, code);
}
static void mk_sense_invalid_opcode(struct scsi_cmnd *scp)
{
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_OPCODE, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_COMMAND_OP_CODE);
}
static int scsi_debug_ioctl(struct scsi_device *dev, unsigned int cmd,
@@ -1484,46 +1485,43 @@ static int make_ua(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
switch (k) {
case SDEBUG_UA_POR:
- mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
- POWER_ON_RESET_ASCQ);
+ mk_sense_buffer(scp, UNIT_ATTENTION,
+ POWER_ON_RESET_OR_BUS_DEVICE_RESET_OCCURRED);
if (sdebug_verbose)
cp = "power on reset";
break;
case SDEBUG_UA_POOCCUR:
- mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
- POWER_ON_OCCURRED_ASCQ);
+ mk_sense_buffer(scp, UNIT_ATTENTION, POWER_ON_OCCURRED);
if (sdebug_verbose)
cp = "power on occurred";
break;
case SDEBUG_UA_BUS_RESET:
- mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
- BUS_RESET_ASCQ);
+ mk_sense_buffer(scp, UNIT_ATTENTION,
+ SCSI_BUS_RESET_OCCURRED);
if (sdebug_verbose)
cp = "bus reset";
break;
case SDEBUG_UA_MODE_CHANGED:
- mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
- MODE_CHANGED_ASCQ);
+ mk_sense_buffer(scp, UNIT_ATTENTION,
+ MODE_PARAMETERS_CHANGED);
if (sdebug_verbose)
cp = "mode parameters changed";
break;
case SDEBUG_UA_CAPACITY_CHANGED:
- mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
- CAPACITY_CHANGED_ASCQ);
+ mk_sense_buffer(scp, UNIT_ATTENTION,
+ CAPACITY_DATA_HAS_CHANGED);
if (sdebug_verbose)
cp = "capacity data changed";
break;
case SDEBUG_UA_MICROCODE_CHANGED:
mk_sense_buffer(scp, UNIT_ATTENTION,
- TARGET_CHANGED_ASC,
- MICROCODE_CHANGED_ASCQ);
+ MICROCODE_HAS_BEEN_CHANGED);
if (sdebug_verbose)
cp = "microcode has been changed";
break;
case SDEBUG_UA_MICROCODE_CHANGED_WO_RESET:
mk_sense_buffer(scp, UNIT_ATTENTION,
- TARGET_CHANGED_ASC,
- MICROCODE_CHANGED_WO_RESET_ASCQ);
+ MICROCODE_HAS_BEEN_CHANGED_WITHOUT_RESET);
if (sdebug_verbose)
cp = "microcode has been changed without reset";
break;
@@ -1539,14 +1537,13 @@ static int make_ua(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
if (sdebug_scsi_level >= 6) /* SPC-4 and above */
clear_luns_changed_on_target(devip);
mk_sense_buffer(scp, UNIT_ATTENTION,
- TARGET_CHANGED_ASC,
- LUNS_CHANGED_ASCQ);
+ REPORTED_LUNS_DATA_HAS_CHANGED);
if (sdebug_verbose)
cp = "reported luns data has changed";
break;
case SDEBUG_UA_NOT_READY_TO_READY:
- mk_sense_buffer(scp, UNIT_ATTENTION, UA_READY_ASC,
- 0);
+ mk_sense_buffer(scp, UNIT_ATTENTION,
+ NOT_READY_TO_READY_CHANGE_MEDIUM_MAY_HAVE_CHANGED);
if (sdebug_verbose)
cp = "not ready to ready transition/media change";
break;
@@ -2184,14 +2181,14 @@ static int resp_requests(struct scsi_cmnd *scp,
if (dsense) {
arr[0] = 0x72;
arr[1] = NOT_READY;
- arr[2] = LOGICAL_UNIT_NOT_READY;
+ arr[2] = ASC_LU_NOT_READY;
arr[3] = (stopped_state == 2) ? 0x1 : 0x2;
len = 8;
} else {
arr[0] = 0x70;
arr[2] = NOT_READY; /* NO_SENSE in sense_key */
arr[7] = 0xa; /* 18 byte sense buffer */
- arr[12] = LOGICAL_UNIT_NOT_READY;
+ arr[12] = ASC_LU_NOT_READY;
arr[13] = (stopped_state == 2) ? 0x1 : 0x2;
}
} else if ((iec_m_pg[2] & 0x4) && (6 == (iec_m_pg[3] & 0xf))) {
@@ -2199,14 +2196,14 @@ static int resp_requests(struct scsi_cmnd *scp,
if (dsense) {
arr[0] = 0x72;
arr[1] = 0x0; /* NO_SENSE in sense_key */
- arr[2] = THRESHOLD_EXCEEDED;
+ arr[2] = ASC_FAILURE_PREDICTION_THRESHOLD_EXCEEDED;
arr[3] = 0xff; /* Failure prediction(false) */
len = 8;
} else {
arr[0] = 0x70;
arr[2] = 0x0; /* NO_SENSE in sense_key */
arr[7] = 0xa; /* 18 byte sense buffer */
- arr[12] = THRESHOLD_EXCEEDED;
+ arr[12] = ASC_FAILURE_PREDICTION_THRESHOLD_EXCEEDED;
arr[13] = 0xff; /* Failure prediction(false) */
}
} else { /* nothing to report */
@@ -2457,8 +2454,7 @@ static int resp_rsup_opcodes(struct scsi_cmnd *scp,
a_len = alloc_len;
arr = kzalloc((a_len < 256) ? 320 : a_len + 64, GFP_ATOMIC);
if (NULL == arr) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
- INSUFF_RES_ASCQ);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFFICIENT_RESOURCES);
return check_condition_result;
}
switch (reporting_opts) {
@@ -2924,8 +2920,9 @@ static int resp_mode_sense(struct scsi_cmnd *scp,
else
bd_len = 0;
alloc_len = msense_6 ? cmd[4] : get_unaligned_be16(cmd + 7);
- if (0x3 == pcontrol) { /* Saving values not supported */
- mk_sense_buffer(scp, ILLEGAL_REQUEST, SAVING_PARAMS_UNSUP, 0);
+ if (0x3 == pcontrol) {
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ SAVING_PARAMETERS_NOT_SUPPORTED);
return check_condition_result;
}
target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
@@ -3174,7 +3171,7 @@ static int resp_mode_select(struct scsi_cmnd *scp,
(arr[off + 1] + 2);
if ((pg_len + off) > param_len) {
mk_sense_buffer(scp, ILLEGAL_REQUEST,
- PARAMETER_LIST_LENGTH_ERR, 0);
+ PARAMETER_LIST_LENGTH_ERROR);
return check_condition_result;
}
switch (mpage) {
@@ -3256,7 +3253,7 @@ static int resp_ie_l_pg(unsigned char *arr)
memcpy(arr, ie_l_pg, sizeof(ie_l_pg));
if (iec_m_pg[2] & 0x4) { /* TEST bit set */
- arr[4] = THRESHOLD_EXCEEDED;
+ arr[4] = ASC_FAILURE_PREDICTION_THRESHOLD_EXCEEDED;
arr[5] = 0xff;
}
return sizeof(ie_l_pg);
@@ -3413,7 +3410,8 @@ static int resp_locate(struct scsi_cmnd *scp,
break;
if (i < pos) {
devip->tape_location[partition] = i;
- mk_sense_buffer(scp, BLANK_CHECK, 0x05, 0);
+ mk_sense_buffer(scp, BLANK_CHECK,
+ LU_DOES_NOT_RESPOND_TO_SELECTION);
return check_condition_result;
}
devip->tape_location[partition] = pos;
@@ -3438,8 +3436,9 @@ static int resp_write_filemarks(struct scsi_cmnd *scp,
for (i = 0, pos = devip->tape_location[partition]; i < count; i++, pos++) {
if (pos >= devip->tape_eop[partition] - 1) { /* don't overwrite EOD */
devip->tape_location[partition] = devip->tape_eop[partition] - 1;
- mk_sense_info_tape(scp, VOLUME_OVERFLOW, NO_ADDITIONAL_SENSE,
- EOP_EOM_DETECTED_ASCQ, count, SENSE_FLAG_EOM);
+ mk_sense_info_tape(scp, VOLUME_OVERFLOW,
+ END_OF_PARTITION_MEDIUM_DETECTED,
+ count, SENSE_FLAG_EOM);
return check_condition_result;
}
(devip->tape_blocks[partition] + pos)->fl_size = data;
@@ -3540,31 +3539,28 @@ static int resp_space(struct scsi_cmnd *scp,
is_fm:
devip->tape_location[partition] = pos;
- mk_sense_info_tape(scp, NO_SENSE, NO_ADDITIONAL_SENSE,
- FILEMARK_DETECTED_ASCQ, count - i,
- SENSE_FLAG_FILEMARK);
+ mk_sense_info_tape(scp, NO_SENSE, FILEMARK_DETECTED,
+ count - i, SENSE_FLAG_FILEMARK);
return check_condition_result;
is_eod:
devip->tape_location[partition] = pos;
- mk_sense_info_tape(scp, BLANK_CHECK, NO_ADDITIONAL_SENSE,
- EOD_DETECTED_ASCQ, count - i,
- 0);
+ mk_sense_info_tape(scp, BLANK_CHECK, END_OF_DATA_DETECTED,
+ count - i, 0);
return check_condition_result;
is_bop:
devip->tape_location[partition] = 0;
- mk_sense_info_tape(scp, NO_SENSE, NO_ADDITIONAL_SENSE,
- BEGINNING_OF_P_M_DETECTED_ASCQ, count - i,
- SENSE_FLAG_EOM);
+ mk_sense_info_tape(scp, NO_SENSE,
+ BEGINNING_OF_PARTITION_MEDIUM_DETECTED,
+ count - i, SENSE_FLAG_EOM);
devip->tape_location[partition] = 0;
return check_condition_result;
is_eop:
devip->tape_location[partition] = devip->tape_eop[partition] - 1;
- mk_sense_info_tape(scp, MEDIUM_ERROR, NO_ADDITIONAL_SENSE,
- EOP_EOM_DETECTED_ASCQ, (unsigned int)i,
- SENSE_FLAG_EOM);
+ mk_sense_info_tape(scp, MEDIUM_ERROR, END_OF_PARTITION_MEDIUM_DETECTED,
+ (unsigned int)i, SENSE_FLAG_EOM);
return check_condition_result;
}
@@ -3852,8 +3848,7 @@ static int check_zbc_access_params(struct scsi_cmnd *scp,
/* For host-managed, reads cannot cross zone types boundaries */
if (zsp->z_type != zsp_end->z_type) {
mk_sense_buffer(scp, ILLEGAL_REQUEST,
- LBA_OUT_OF_RANGE,
- READ_INVDATA_ASCQ);
+ ATTEMPT_TO_READ_INVALID_DATA);
return check_condition_result;
}
return 0;
@@ -3861,8 +3856,8 @@ static int check_zbc_access_params(struct scsi_cmnd *scp,
/* Writing into a gap zone is not allowed */
if (zbc_zone_is_gap(zsp)) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE,
- ATTEMPT_ACCESS_GAP);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ ATTEMPT_TO_ACCESS_GAP_ZONE);
return check_condition_result;
}
@@ -3870,8 +3865,7 @@ static int check_zbc_access_params(struct scsi_cmnd *scp,
if (zbc_zone_is_conv(zsp)) {
if (!zbc_zone_is_conv(zsp_end)) {
mk_sense_buffer(scp, ILLEGAL_REQUEST,
- LBA_OUT_OF_RANGE,
- WRITE_BOUNDARY_ASCQ);
+ WRITE_BOUNDARY_VIOLATION);
return check_condition_result;
}
return 0;
@@ -3881,21 +3875,19 @@ static int check_zbc_access_params(struct scsi_cmnd *scp,
/* Writes cannot cross sequential zone boundaries */
if (zsp_end != zsp) {
mk_sense_buffer(scp, ILLEGAL_REQUEST,
- LBA_OUT_OF_RANGE,
- WRITE_BOUNDARY_ASCQ);
+ WRITE_BOUNDARY_VIOLATION);
return check_condition_result;
}
/* Cannot write full zones */
if (zsp->z_cond == ZC5_FULL) {
mk_sense_buffer(scp, ILLEGAL_REQUEST,
- INVALID_FIELD_IN_CDB, 0);
+ INVALID_FIELD_IN_CDB);
return check_condition_result;
}
/* Writes must be aligned to the zone WP */
if (lba != zsp->z_wp) {
mk_sense_buffer(scp, ILLEGAL_REQUEST,
- LBA_OUT_OF_RANGE,
- UNALIGNED_WRITE_ASCQ);
+ UNALIGNED_WRITE_COMMAND);
return check_condition_result;
}
}
@@ -3905,8 +3897,7 @@ static int check_zbc_access_params(struct scsi_cmnd *scp,
if (devip->max_open &&
devip->nr_exp_open >= devip->max_open) {
mk_sense_buffer(scp, DATA_PROTECT,
- INSUFF_RES_ASC,
- INSUFF_ZONE_ASCQ);
+ INSUFFICIENT_ZONE_RESOURCES);
return check_condition_result;
}
zbc_open_zone(devip, zsp, false);
@@ -3923,17 +3914,18 @@ static inline int check_device_access_params
struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
if (lba + num > sdebug_capacity) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE);
return check_condition_result;
}
/* transfer length excessive (tie in to block limits VPD page) */
if (num > sdebug_store_sectors) {
/* needs work to find which cdb byte 'num' comes from */
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
return check_condition_result;
}
if (write && unlikely(sdebug_wp)) {
- mk_sense_buffer(scp, DATA_PROTECT, WRITE_PROTECTED, 0x2);
+ mk_sense_buffer(scp, DATA_PROTECT, LU_SOFTWARE_WRITE_PROTECTED);
return check_condition_result;
}
if (sdebug_dev_is_zoned(devip))
@@ -4442,17 +4434,17 @@ static int resp_read_tape(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
i++, pos++, blp++) {
devip->tape_location[partition] = pos + 1;
if (IS_TAPE_BLOCK_FM(blp->fl_size)) {
- mk_sense_info_tape(scp, NO_SENSE, NO_ADDITIONAL_SENSE,
- FILEMARK_DETECTED_ASCQ, fixed ? num - i : size,
- SENSE_FLAG_FILEMARK);
+ mk_sense_info_tape(scp, NO_SENSE, FILEMARK_DETECTED,
+ fixed ? num - i : size,
+ SENSE_FLAG_FILEMARK);
scsi_set_resid(scp, (num - i) * size);
return check_condition_result;
}
/* Assume no REW */
if (IS_TAPE_BLOCK_EOD(blp->fl_size)) {
- mk_sense_info_tape(scp, BLANK_CHECK, NO_ADDITIONAL_SENSE,
- EOD_DETECTED_ASCQ, fixed ? num - i : size,
- 0);
+ mk_sense_info_tape(scp, BLANK_CHECK,
+ END_OF_DATA_DETECTED,
+ fixed ? num - i : size, 0);
devip->tape_location[partition] = pos;
scsi_set_resid(scp, (num - i) * size);
return check_condition_result;
@@ -4464,9 +4456,9 @@ static int resp_read_tape(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
if (fixed) {
if (blp->fl_size != devip->tape_blksize) {
scsi_set_resid(scp, (num - i) * size);
- mk_sense_info_tape(scp, NO_SENSE, NO_ADDITIONAL_SENSE,
- 0, num - i,
- SENSE_FLAG_ILI);
+ mk_sense_info_tape(scp, NO_SENSE,
+ NO_ADDITIONAL_SENSE_INFORMATION,
+ num - i, SENSE_FLAG_ILI);
return check_condition_result;
}
} else {
@@ -4474,18 +4466,19 @@ static int resp_read_tape(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
if (blp->fl_size < size)
scsi_set_resid(scp, size - blp->fl_size);
if (!sili) {
- mk_sense_info_tape(scp, NO_SENSE, NO_ADDITIONAL_SENSE,
- 0, size - blp->fl_size,
- SENSE_FLAG_ILI);
+ mk_sense_info_tape(scp, NO_SENSE,
+ NO_ADDITIONAL_SENSE_INFORMATION,
+ size - blp->fl_size,
+ SENSE_FLAG_ILI);
return check_condition_result;
}
}
}
}
if (pos >= devip->tape_eop[partition]) {
- mk_sense_info_tape(scp, NO_SENSE, NO_ADDITIONAL_SENSE,
- EOP_EOM_DETECTED_ASCQ, fixed ? num - i : size,
- SENSE_FLAG_EOM);
+ mk_sense_info_tape(scp, NO_SENSE,
+ END_OF_PARTITION_MEDIUM_DETECTED,
+ fixed ? num - i : size, SENSE_FLAG_EOM);
devip->tape_location[partition] = pos - 1;
return check_condition_result;
}
@@ -4572,8 +4565,7 @@ static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
if (unlikely((SDEBUG_OPT_MEDIUM_ERR & sdebug_opts) &&
(lba <= (sdebug_medium_error_start + sdebug_medium_error_count - 1)) &&
((lba + num) > sdebug_medium_error_start))) {
- /* claim unrecoverable read error */
- mk_sense_buffer(scp, MEDIUM_ERROR, UNRECOVERED_READ_ERR, 0);
+ mk_sense_buffer(scp, MEDIUM_ERROR, UNRECOVERED_READ_ERROR);
/* set info field and valid bit for fixed descriptor */
if (0x70 == (scp->sense_buffer[0] & 0x7f)) {
scp->sense_buffer[0] |= 0x80; /* Valid bit */
@@ -4597,22 +4589,26 @@ static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
case 1: /* Guard tag error */
if (cmd[1] >> 5 != 3) { /* RDPROTECT != 3 */
sdeb_meta_read_unlock(sip);
- mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
+ mk_sense_buffer(scp, ABORTED_COMMAND,
+ LOGICAL_BLOCK_GUARD_CHECK_FAILED);
return check_condition_result;
} else if (scp->prot_flags & SCSI_PROT_GUARD_CHECK) {
sdeb_meta_read_unlock(sip);
- mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_GUARD_CHECK_FAILED);
return illegal_condition_result;
}
break;
case 3: /* Reference tag error */
if (cmd[1] >> 5 != 3) { /* RDPROTECT != 3 */
sdeb_meta_read_unlock(sip);
- mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 3);
+ mk_sense_buffer(scp, ABORTED_COMMAND,
+ LOGICAL_BLOCK_REFERENCE_TAG_CHECK_FAILED);
return check_condition_result;
} else if (scp->prot_flags & SCSI_PROT_REF_CHECK) {
sdeb_meta_read_unlock(sip);
- mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 3);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_REFERENCE_TAG_CHECK_FAILED);
return illegal_condition_result;
}
break;
@@ -4630,16 +4626,18 @@ static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
atomic_read(&sdeb_inject_pending))) {
if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
- mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
+ mk_sense_buffer(scp, RECOVERED_ERROR,
+ FAILURE_PREDICTION_THRESHOLD_EXCEEDED);
atomic_set(&sdeb_inject_pending, 0);
return check_condition_result;
} else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
- /* Logical block guard check failed */
- mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
+ mk_sense_buffer(scp, ABORTED_COMMAND,
+ LOGICAL_BLOCK_GUARD_CHECK_FAILED);
atomic_set(&sdeb_inject_pending, 0);
return illegal_condition_result;
} else if (SDEBUG_OPT_DIX_ERR & sdebug_opts) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_GUARD_CHECK_FAILED);
atomic_set(&sdeb_inject_pending, 0);
return illegal_condition_result;
}
@@ -4846,16 +4844,14 @@ static int resp_write_tape(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
blp->fl_size = TAPE_BLOCK_EOD_FLAG;
if (pos >= devip->tape_eop[partition] - 1) {
mk_sense_info_tape(scp, VOLUME_OVERFLOW,
- NO_ADDITIONAL_SENSE, EOP_EOM_DETECTED_ASCQ,
- fixed ? num - i : transfer,
- SENSE_FLAG_EOM);
+ END_OF_PARTITION_MEDIUM_DETECTED,
+ fixed ? num - i : transfer, SENSE_FLAG_EOM);
return check_condition_result;
}
if (ew) { /* early warning */
mk_sense_info_tape(scp, NO_SENSE,
- NO_ADDITIONAL_SENSE, EOP_EOM_DETECTED_ASCQ,
- fixed ? num - i : transfer,
- SENSE_FLAG_EOM);
+ END_OF_PARTITION_MEDIUM_DETECTED,
+ fixed ? num - i : transfer, SENSE_FLAG_EOM);
return check_condition_result;
}
@@ -4877,8 +4873,7 @@ static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
if (unlikely(sdebug_opts & SDEBUG_OPT_UNALIGNED_WRITE &&
atomic_read(&sdeb_inject_pending))) {
atomic_set(&sdeb_inject_pending, 0);
- mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE,
- UNALIGNED_WRITE_ASCQ);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, UNALIGNED_WRITE_COMMAND);
return check_condition_result;
}
@@ -4959,22 +4954,26 @@ static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
case 1: /* Guard tag error */
if (scp->prot_flags & SCSI_PROT_GUARD_CHECK) {
sdeb_meta_write_unlock(sip);
- mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_GUARD_CHECK_FAILED);
return illegal_condition_result;
} else if (scp->cmnd[1] >> 5 != 3) { /* WRPROTECT != 3 */
sdeb_meta_write_unlock(sip);
- mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
+ mk_sense_buffer(scp, ABORTED_COMMAND,
+ LOGICAL_BLOCK_GUARD_CHECK_FAILED);
return check_condition_result;
}
break;
case 3: /* Reference tag error */
if (scp->prot_flags & SCSI_PROT_REF_CHECK) {
sdeb_meta_write_unlock(sip);
- mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 3);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_REFERENCE_TAG_CHECK_FAILED);
return illegal_condition_result;
} else if (scp->cmnd[1] >> 5 != 3) { /* WRPROTECT != 3 */
sdeb_meta_write_unlock(sip);
- mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 3);
+ mk_sense_buffer(scp, ABORTED_COMMAND,
+ LOGICAL_BLOCK_REFERENCE_TAG_CHECK_FAILED);
return check_condition_result;
}
break;
@@ -5002,16 +5001,18 @@ static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
atomic_read(&sdeb_inject_pending))) {
if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
- mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
+ mk_sense_buffer(scp, RECOVERED_ERROR,
+ FAILURE_PREDICTION_THRESHOLD_EXCEEDED);
atomic_set(&sdeb_inject_pending, 0);
return check_condition_result;
} else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
- /* Logical block guard check failed */
- mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
+ mk_sense_buffer(scp, ABORTED_COMMAND,
+ LOGICAL_BLOCK_GUARD_CHECK_FAILED);
atomic_set(&sdeb_inject_pending, 0);
return illegal_condition_result;
} else if (sdebug_opts & SDEBUG_OPT_DIX_ERR) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_GUARD_CHECK_FAILED);
atomic_set(&sdeb_inject_pending, 0);
return illegal_condition_result;
}
@@ -5074,7 +5075,7 @@ static int resp_write_scat(struct scsi_cmnd *scp,
if (sdebug_verbose)
sdev_printk(KERN_INFO, scp->device,
"%s: LB Data Offset field bad\n", my_name);
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
return illegal_condition_result;
}
lbdof_blen = lbdof * lb_size;
@@ -5082,7 +5083,7 @@ static int resp_write_scat(struct scsi_cmnd *scp,
if (sdebug_verbose)
sdev_printk(KERN_INFO, scp->device,
"%s: LBA range descriptors don't fit\n", my_name);
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
return illegal_condition_result;
}
lrdp = kzalloc(lbdof_blen, GFP_ATOMIC | __GFP_NOWARN);
@@ -5123,8 +5124,7 @@ static int resp_write_scat(struct scsi_cmnd *scp,
sdev_printk(KERN_INFO, scp->device,
"%s: sum of blocks > data provided\n",
my_name);
- mk_sense_buffer(scp, ILLEGAL_REQUEST, WRITE_ERROR_ASC,
- 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, WRITE_ERROR);
ret = illegal_condition_result;
goto err_out_unlock;
}
@@ -5135,8 +5135,9 @@ static int resp_write_scat(struct scsi_cmnd *scp,
ei_lba);
if (prot_ret) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10,
- prot_ret);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ scsi_sense_code(ASC_ID_CRC_OR_ECC_ERROR,
+ prot_ret));
ret = illegal_condition_result;
goto err_out_unlock;
}
@@ -5163,18 +5164,20 @@ static int resp_write_scat(struct scsi_cmnd *scp,
if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
atomic_read(&sdeb_inject_pending))) {
if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
- mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
+ mk_sense_buffer(scp, RECOVERED_ERROR,
+ FAILURE_PREDICTION_THRESHOLD_EXCEEDED);
atomic_set(&sdeb_inject_pending, 0);
ret = check_condition_result;
goto err_out_unlock;
} else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
- /* Logical block guard check failed */
- mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
+ mk_sense_buffer(scp, ABORTED_COMMAND,
+ LOGICAL_BLOCK_GUARD_CHECK_FAILED);
atomic_set(&sdeb_inject_pending, 0);
ret = illegal_condition_result;
goto err_out_unlock;
} else if (sdebug_opts & SDEBUG_OPT_DIX_ERR) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_GUARD_CHECK_FAILED);
atomic_set(&sdeb_inject_pending, 0);
ret = illegal_condition_result;
goto err_out_unlock;
@@ -5393,8 +5396,7 @@ static int resp_comp_write(struct scsi_cmnd *scp,
dnum = 2 * num;
arr = kcalloc(lb_size, dnum, GFP_ATOMIC);
if (NULL == arr) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
- INSUFF_RES_ASCQ);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFFICIENT_RESOURCES);
return check_condition_result;
}
@@ -5410,7 +5412,8 @@ static int resp_comp_write(struct scsi_cmnd *scp,
sdeb_data_write_lock(sip);
sdeb_meta_write_lock(sip);
if (!comp_write_worker(sip, lba, num, arr, false)) {
- mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
+ mk_sense_buffer(scp, MISCOMPARE,
+ MISCOMPARE_DURING_VERIFY_OPERATION);
retval = check_condition_result;
goto cleanup_unlock;
}
@@ -5453,8 +5456,7 @@ static int resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
buf = kzalloc(scsi_bufflen(scp), GFP_ATOMIC);
if (!buf) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
- INSUFF_RES_ASCQ);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFFICIENT_RESOURCES);
return check_condition_result;
}
@@ -5592,7 +5594,8 @@ static int resp_sync_cache(struct scsi_cmnd *scp,
num_blocks = get_unaligned_be32(cmd + 10);
}
if (lba + num_blocks > sdebug_capacity) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE);
return check_condition_result;
}
if (!write_since_sync || (cmd[1] & 0x2))
@@ -5630,7 +5633,8 @@ static int resp_pre_fetch(struct scsi_cmnd *scp,
nblks = get_unaligned_be32(cmd + 10);
}
if (lba + nblks > sdebug_capacity) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE);
return check_condition_result;
}
if (!fsp)
@@ -5801,8 +5805,7 @@ static int resp_verify(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
arr = kcalloc(lb_size, vnum, GFP_ATOMIC | __GFP_NOWARN);
if (!arr) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
- INSUFF_RES_ASCQ);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFFICIENT_RESOURCES);
return check_condition_result;
}
/* Not changing store, so only need read access */
@@ -5823,7 +5826,8 @@ static int resp_verify(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
}
ret = 0;
if (!comp_write_worker(sip, lba, vnum, arr, true)) {
- mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
+ mk_sense_buffer(scp, MISCOMPARE,
+ MISCOMPARE_DURING_VERIFY_OPERATION);
ret = check_condition_result;
goto cleanup;
}
@@ -5862,7 +5866,8 @@ static int resp_report_zones(struct scsi_cmnd *scp,
partial = cmd[14] & 0x80;
if (zs_lba >= sdebug_capacity) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE);
return check_condition_result;
}
@@ -5873,8 +5878,8 @@ static int resp_report_zones(struct scsi_cmnd *scp,
arr = kzalloc(arr_len, GFP_ATOMIC | __GFP_NOWARN);
if (!arr) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
- INSUFF_RES_ASCQ);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ INSUFFICIENT_RESOURCES);
return check_condition_result;
}
@@ -5939,8 +5944,7 @@ static int resp_report_zones(struct scsi_cmnd *scp,
continue;
break;
default:
- mk_sense_buffer(scp, ILLEGAL_REQUEST,
- INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
ret = check_condition_result;
goto fini;
}
@@ -6005,13 +6009,13 @@ static int resp_atomic_write(struct scsi_cmnd *scp,
if (sdebug_atomic_wr_align &&
do_div(lba_tmp, sdebug_atomic_wr_align)) {
/* Does not meet alignment requirement */
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
return check_condition_result;
}
if (sdebug_atomic_wr_gran && len % sdebug_atomic_wr_gran) {
/* Does not meet alignment requirement */
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
return check_condition_result;
}
@@ -6072,8 +6076,8 @@ static int resp_open_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
/* Check if all closed zones can be open */
if (devip->max_open &&
devip->nr_exp_open + devip->nr_closed > devip->max_open) {
- mk_sense_buffer(scp, DATA_PROTECT, INSUFF_RES_ASC,
- INSUFF_ZONE_ASCQ);
+ mk_sense_buffer(scp, DATA_PROTECT,
+ INSUFFICIENT_ZONE_RESOURCES);
res = check_condition_result;
goto fini;
}
@@ -6085,19 +6089,20 @@ static int resp_open_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
/* Open the specified zone */
z_id = get_unaligned_be64(cmd + 2);
if (z_id >= sdebug_capacity) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE);
res = check_condition_result;
goto fini;
}
zsp = zbc_zone(devip, z_id);
if (z_id != zsp->z_start) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
res = check_condition_result;
goto fini;
}
if (zbc_zone_is_conv(zsp)) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
res = check_condition_result;
goto fini;
}
@@ -6107,8 +6112,7 @@ static int resp_open_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
goto fini;
if (devip->max_open && devip->nr_exp_open >= devip->max_open) {
- mk_sense_buffer(scp, DATA_PROTECT, INSUFF_RES_ASC,
- INSUFF_ZONE_ASCQ);
+ mk_sense_buffer(scp, DATA_PROTECT, INSUFFICIENT_ZONE_RESOURCES);
res = check_condition_result;
goto fini;
}
@@ -6152,19 +6156,20 @@ static int resp_close_zone(struct scsi_cmnd *scp,
/* Close specified zone */
z_id = get_unaligned_be64(cmd + 2);
if (z_id >= sdebug_capacity) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE);
res = check_condition_result;
goto fini;
}
zsp = zbc_zone(devip, z_id);
if (z_id != zsp->z_start) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
res = check_condition_result;
goto fini;
}
if (zbc_zone_is_conv(zsp)) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
res = check_condition_result;
goto fini;
}
@@ -6224,19 +6229,20 @@ static int resp_finish_zone(struct scsi_cmnd *scp,
/* Finish the specified zone */
z_id = get_unaligned_be64(cmd + 2);
if (z_id >= sdebug_capacity) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE);
res = check_condition_result;
goto fini;
}
zsp = zbc_zone(devip, z_id);
if (z_id != zsp->z_start) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
res = check_condition_result;
goto fini;
}
if (zbc_zone_is_conv(zsp)) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
res = check_condition_result;
goto fini;
}
@@ -6303,19 +6309,20 @@ static int resp_rwp_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
z_id = get_unaligned_be64(cmd + 2);
if (z_id >= sdebug_capacity) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST,
+ LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE);
res = check_condition_result;
goto fini;
}
zsp = zbc_zone(devip, z_id);
if (z_id != zsp->z_start) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
res = check_condition_result;
goto fini;
}
if (zbc_zone_is_conv(zsp)) {
- mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
+ mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB);
res = check_condition_result;
goto fini;
}
@@ -7186,7 +7193,7 @@ static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
cmnd->result = scsi_result;
if (cmnd->result == 0 && unlikely(sdebug_opts & SDEBUG_OPT_TRANSPORT_ERR)) {
if (atomic_read(&sdeb_inject_pending)) {
- mk_sense_buffer(cmnd, ABORTED_COMMAND, TRANSPORT_PROBLEM, ACK_NAK_TO);
+ mk_sense_buffer(cmnd, ABORTED_COMMAND, ACK_NAK_TIMEOUT);
atomic_set(&sdeb_inject_pending, 0);
cmnd->result = check_condition_result;
}
@@ -8979,7 +8986,8 @@ static int resp_not_ready(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
return 0;
}
}
- mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x1);
+ mk_sense_buffer(scp, NOT_READY,
+ LU_IS_IN_PROCESS_OF_BECOMING_READY);
if (sdebug_verbose)
sdev_printk(KERN_INFO, sdp,
"%s: Not ready: in process of becoming ready\n", my_name);
@@ -8997,7 +9005,8 @@ static int resp_not_ready(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
return check_condition_result;
}
}
- mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x2);
+ mk_sense_buffer(scp, NOT_READY,
+ LU_NOT_READY_INITIALIZING_COMMAND_REQUIRED);
if (sdebug_verbose)
sdev_printk(KERN_INFO, sdp, "%s: Not ready: initializing command required\n",
my_name);
@@ -9194,7 +9203,8 @@ static int sdebug_fail_cmd(struct scsi_cmnd *cmnd, int *retval,
out_handle:
if (err->cnt < 0)
err->cnt++;
- mk_sense_buffer(cmnd, err->sense_key, err->asc, err->asq);
+ mk_sense_buffer(cmnd, err->sense_key,
+ scsi_sense_code(err->asc, err->asq));
result = err->status_byte | err->host_byte << 16 | err->driver_byte << 24;
*info = *err;
*retval = schedule_resp(cmnd, devip, result, NULL, 0, 0);
--
2.55.0
next prev parent reply other threads:[~2026-08-31 2:05 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-31 2:04 [PATCH 00/37] Use defined 16-bits ASC/ASCQ combinations Damien Le Moal
2026-08-31 2:04 ` [PATCH 01/37] scsi: define all additional sense codes and their qualifiers Damien Le Moal
2026-08-31 2:04 ` [PATCH 02/37] scsi: constants: use defined sense codes Damien Le Moal
2026-08-31 2:04 ` [PATCH 03/37] scsi: constants: rename internal struct field names Damien Le Moal
2026-08-31 2:04 ` [PATCH 04/37] scsi: rename sense field of struct scsi_failure Damien Le Moal
2026-08-31 2:17 ` sashiko-bot
2026-08-31 2:04 ` [PATCH 05/37] scsi: prepare for using 16-bits defined sense codes Damien Le Moal
2026-08-31 2:04 ` [PATCH 06/37] scsi: use struct scsi_sense_hdr to log sense keys and codes Damien Le Moal
2026-08-31 2:04 ` [PATCH 07/37] scsi: core: use 16-bits defined sense codes Damien Le Moal
2026-08-31 2:18 ` sashiko-bot
2026-08-31 2:04 ` [PATCH 08/37] scsi: sd: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 09/37] scsi: sr: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 10/37] scsi: ses: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 11/37] scsi: ch: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 12/37] scsi: st: " Damien Le Moal
2026-08-31 2:19 ` sashiko-bot
2026-08-31 2:04 ` [PATCH 13/37] scsi: device_handlers: hp_sw: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 14/37] scsi: device_handlers: rdac: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 15/37] scsi: device_handlers: emc: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 16/37] scsi: device_handlers: alua: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 17/37] scsi: mpt3sas: " Damien Le Moal
2026-08-31 2:19 ` sashiko-bot
2026-08-31 2:04 ` [PATCH 18/37] scsi: mpi3mr: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 19/37] scsi: 3w-xxxx: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 20/37] scsi: leapraid: " Damien Le Moal
2026-08-31 2:18 ` sashiko-bot
2026-08-31 2:04 ` [PATCH 21/37] scsi: megaraid: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 22/37] scsi: myrX: " Damien Le Moal
2026-08-31 2:30 ` sashiko-bot
2026-08-31 2:04 ` [PATCH 23/37] scsi: smartpqi: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 24/37] scsi: qla2xxx: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 25/37] scsi: ps3rom: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 26/37] scsi: lpfc: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 27/37] scsi: stex: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 28/37] scsi: mvumi: " Damien Le Moal
2026-08-31 2:24 ` sashiko-bot
2026-08-31 2:04 ` [PATCH 29/37] scsi: libiscsi: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 30/37] scsi: ibmvscsi_tgt: " Damien Le Moal
2026-08-31 2:27 ` sashiko-bot
2026-08-31 2:04 ` Damien Le Moal [this message]
2026-08-31 2:04 ` [PATCH 32/37] scsi: hpsa: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 33/37] scsi: storvsc: " Damien Le Moal
2026-08-31 2:27 ` sashiko-bot
2026-08-31 2:04 ` [PATCH 34/37] usb: storage: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 35/37] cdrom: " Damien Le Moal
2026-08-31 2:29 ` sashiko-bot
2026-08-31 2:04 ` [PATCH 36/37] ata: libata: " Damien Le Moal
2026-08-31 2:04 ` [PATCH 37/37] scsi: cleanup scsi_proto.h Damien Le Moal
2026-08-31 2:31 ` sashiko-bot
2026-08-31 2:36 ` [PATCH 00/37] Use defined 16-bits ASC/ASCQ combinations Damien Le Moal
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=20260831020451.585944-32-dlemoal@kernel.org \
--to=dlemoal@kernel.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=cassel@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-ide@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