Message ID | 20230731221458.437440-6-bvanassche@acm.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Improve the performance for zoned UFS devices | expand |
On 2023-07-31 18:14, Bart Van Assche wrote: > Allow user space software, e.g. a blktests test, to inject unaligned > write errors. > > Cc: Martin K. Petersen <martin.petersen@oracle.com> > Cc: Douglas Gilbert <dgilbert@interlog.com> > Signed-off-by: Bart Van Assche <bvanassche@acm.org> Acked-by: Douglas Gilbert <dgilbert@interlog.com> Thanks. > --- > drivers/scsi/scsi_debug.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c > index 57c6242bfb26..051b0605f11f 100644 > --- a/drivers/scsi/scsi_debug.c > +++ b/drivers/scsi/scsi_debug.c > @@ -181,6 +181,7 @@ static const char *sdebug_version_date = "20210520"; > #define SDEBUG_OPT_NO_CDB_NOISE 0x4000 > #define SDEBUG_OPT_HOST_BUSY 0x8000 > #define SDEBUG_OPT_CMD_ABORT 0x10000 > +#define SDEBUG_OPT_UNALIGNED_WRITE 0x20000 > #define SDEBUG_OPT_ALL_NOISE (SDEBUG_OPT_NOISE | SDEBUG_OPT_Q_NOISE | \ > SDEBUG_OPT_RESET_NOISE) > #define SDEBUG_OPT_ALL_INJECTING (SDEBUG_OPT_RECOVERED_ERR | \ > @@ -188,7 +189,8 @@ static const char *sdebug_version_date = "20210520"; > SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR | \ > SDEBUG_OPT_SHORT_TRANSFER | \ > SDEBUG_OPT_HOST_BUSY | \ > - SDEBUG_OPT_CMD_ABORT) > + SDEBUG_OPT_CMD_ABORT | \ > + SDEBUG_OPT_UNALIGNED_WRITE) > #define SDEBUG_OPT_RECOV_DIF_DIX (SDEBUG_OPT_RECOVERED_ERR | \ > SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR) > > @@ -3587,6 +3589,14 @@ static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) > struct sdeb_store_info *sip = devip2sip(devip, true); > u8 *cmd = scp->cmnd; > > + 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); > + return check_condition_result; > + } > + > switch (cmd[0]) { > case WRITE_16: > ei_lba = 0;
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 57c6242bfb26..051b0605f11f 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -181,6 +181,7 @@ static const char *sdebug_version_date = "20210520"; #define SDEBUG_OPT_NO_CDB_NOISE 0x4000 #define SDEBUG_OPT_HOST_BUSY 0x8000 #define SDEBUG_OPT_CMD_ABORT 0x10000 +#define SDEBUG_OPT_UNALIGNED_WRITE 0x20000 #define SDEBUG_OPT_ALL_NOISE (SDEBUG_OPT_NOISE | SDEBUG_OPT_Q_NOISE | \ SDEBUG_OPT_RESET_NOISE) #define SDEBUG_OPT_ALL_INJECTING (SDEBUG_OPT_RECOVERED_ERR | \ @@ -188,7 +189,8 @@ static const char *sdebug_version_date = "20210520"; SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR | \ SDEBUG_OPT_SHORT_TRANSFER | \ SDEBUG_OPT_HOST_BUSY | \ - SDEBUG_OPT_CMD_ABORT) + SDEBUG_OPT_CMD_ABORT | \ + SDEBUG_OPT_UNALIGNED_WRITE) #define SDEBUG_OPT_RECOV_DIF_DIX (SDEBUG_OPT_RECOVERED_ERR | \ SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR) @@ -3587,6 +3589,14 @@ static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) struct sdeb_store_info *sip = devip2sip(devip, true); u8 *cmd = scp->cmnd; + 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); + return check_condition_result; + } + switch (cmd[0]) { case WRITE_16: ei_lba = 0;
Allow user space software, e.g. a blktests test, to inject unaligned write errors. Cc: Martin K. Petersen <martin.petersen@oracle.com> Cc: Douglas Gilbert <dgilbert@interlog.com> Signed-off-by: Bart Van Assche <bvanassche@acm.org> --- drivers/scsi/scsi_debug.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)