On Tue, 2019-04-09 at 17:02 -0700, Jaesoo Lee wrote: > When SCSI blk-mq is enabled, there is a bug in handling errors in > scsi_queue_rq. > Specifically, the bug is not setting result field of scsi_request correctly > when > the dispatch of the command has been failed. Since the upper layer code > including the sg_io ioctl expects to receive any error status from result > field > of scsi_request, the error is silently ignored and this could cause data > corruptions for some applications. > > Signed-off-by: Jaesoo Lee <ja...@purestorage.com> > --- > drivers/scsi/scsi_lib.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c > index 2018967..dc2550c 100644 > --- a/drivers/scsi/scsi_lib.c > +++ b/drivers/scsi/scsi_lib.c > @@ -1699,8 +1699,12 @@ static blk_status_t scsi_queue_rq(struct > blk_mq_hw_ctx *hctx, > ret = BLK_STS_DEV_RESOURCE; > break; > default: > + if (unlikely(!scsi_device_online(sdev))) > + scsi_req(req)->result = DID_NO_CONNECT << 16; > + else > + scsi_req(req)->result = DID_ERROR << 16; > /* > - * Make sure to release all allocated ressources when > + * Make sure to release all allocated resources when > * we hit an error, as we will never see this command > * again. > */
Should "Fixes:" and "Cc: stable" tags be added to this patch? Anyway: Reviewed-by: Bart Van Assche <bvanass...@acm.org>