mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 19:13:47 +02:00
scsi: scsi_debug: Rework page code error handling
Instead of tracking whether or not the page code is valid in a boolean variable, jump to error handling code if an unsupported page code is encountered. Cc: Martin K. Petersen <martin.petersen@oracle.com> Cc: Douglas Gilbert <dgilbert@interlog.com> Tested-by: Douglas Gilbert <dgilbert@interlog.com> Signed-off-by: Bart Van Assche <bvanassche@acm.org> Link: https://lore.kernel.org/r/20240130214911.1863909-15-bvanassche@acm.org Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
b1e5c0b34d
commit
b2f860903f
|
|
@ -2644,7 +2644,7 @@ static int resp_mode_sense(struct scsi_cmnd *scp,
|
|||
unsigned char *ap;
|
||||
unsigned char arr[SDEBUG_MAX_MSENSE_SZ];
|
||||
unsigned char *cmd = scp->cmnd;
|
||||
bool dbd, llbaa, msense_6, is_disk, is_zbc, bad_pcode;
|
||||
bool dbd, llbaa, msense_6, is_disk, is_zbc;
|
||||
|
||||
dbd = !!(cmd[1] & 0x8); /* disable block descriptors */
|
||||
pcontrol = (cmd[2] & 0xc0) >> 6;
|
||||
|
|
@ -2708,7 +2708,6 @@ static int resp_mode_sense(struct scsi_cmnd *scp,
|
|||
mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
|
||||
return check_condition_result;
|
||||
}
|
||||
bad_pcode = false;
|
||||
|
||||
switch (pcode) {
|
||||
case 0x1: /* Read-Write error recovery page, direct access */
|
||||
|
|
@ -2723,15 +2722,17 @@ static int resp_mode_sense(struct scsi_cmnd *scp,
|
|||
if (is_disk) {
|
||||
len = resp_format_pg(ap, pcontrol, target);
|
||||
offset += len;
|
||||
} else
|
||||
bad_pcode = true;
|
||||
} else {
|
||||
goto bad_pcode;
|
||||
}
|
||||
break;
|
||||
case 0x8: /* Caching page, direct access */
|
||||
if (is_disk || is_zbc) {
|
||||
len = resp_caching_pg(ap, pcontrol, target);
|
||||
offset += len;
|
||||
} else
|
||||
bad_pcode = true;
|
||||
} else {
|
||||
goto bad_pcode;
|
||||
}
|
||||
break;
|
||||
case 0xa: /* Control Mode page, all devices */
|
||||
len = resp_ctrl_m_pg(ap, pcontrol, target);
|
||||
|
|
@ -2784,18 +2785,17 @@ static int resp_mode_sense(struct scsi_cmnd *scp,
|
|||
}
|
||||
break;
|
||||
default:
|
||||
bad_pcode = true;
|
||||
break;
|
||||
}
|
||||
if (bad_pcode) {
|
||||
mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
|
||||
return check_condition_result;
|
||||
goto bad_pcode;
|
||||
}
|
||||
if (msense_6)
|
||||
arr[0] = offset - 1;
|
||||
else
|
||||
put_unaligned_be16((offset - 2), arr + 0);
|
||||
return fill_from_dev_buffer(scp, arr, min_t(u32, alloc_len, offset));
|
||||
|
||||
bad_pcode:
|
||||
mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
|
||||
return check_condition_result;
|
||||
}
|
||||
|
||||
#define SDEBUG_MAX_MSELECT_SZ 512
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user