From: Hannes Reinecke Date: Wed, 11 Nov 2020 14:40:52 +0000 (+0100) Subject: scsi-generic: check for additional SG_IO status on completion X-Git-Tag: upstream/4.2.1~85 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c41fb976f2541a4ed7ef6373546eec72014db504;p=tools%2Fqemu-arm-static.git scsi-generic: check for additional SG_IO status on completion References: bsc#1178049 SG_IO may return additional status in the 'status', 'driver_status', and 'host_status' fields. When either of these fields are set the command has not been executed normally, so we should not continue processing this command but rather return an error. Signed-off-by: Hannes Reinecke Signed-off-by: Bruce Rogers --- diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c index b3ea492be..2379ca9e9 100644 --- a/hw/scsi/scsi-generic.c +++ b/hw/scsi/scsi-generic.c @@ -254,7 +254,10 @@ static void scsi_read_complete(void * opaque, int ret) aio_context_acquire(blk_get_aio_context(s->conf.blk)); - if (ret || r->req.io_canceled) { + if (ret || r->req.io_canceled || + r->io_header.status || + r->io_header.driver_status || + r->io_header.host_status) { scsi_command_complete_noio(r, ret); goto done; } @@ -368,7 +371,10 @@ static void scsi_write_complete(void * opaque, int ret) aio_context_acquire(blk_get_aio_context(s->conf.blk)); - if (ret || r->req.io_canceled) { + if (ret || r->req.io_canceled || + r->io_header.status || + r->io_header.driver_status || + r->io_header.host_status) { scsi_command_complete_noio(r, ret); goto done; }