[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 2/7] scsi-generic: Handle canceled request in scs
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH v3 2/7] scsi-generic: Handle canceled request in scsi_command_complete |
Date: |
Thu, 25 Sep 2014 10:20:44 +0800 |
Now that we always called the cb in bdrv_aio_cancel, let's make scsi-generic
callbacks check io_canceled flag similarly to scsi-disk.
Signed-off-by: Fam Zheng <address@hidden>
---
hw/scsi/scsi-generic.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c
index 20587b4..2a73a43 100644
--- a/hw/scsi/scsi-generic.c
+++ b/hw/scsi/scsi-generic.c
@@ -93,6 +93,9 @@ static void scsi_command_complete(void *opaque, int ret)
SCSIGenericReq *r = (SCSIGenericReq *)opaque;
r->req.aiocb = NULL;
+ if (r->req.io_canceled) {
+ goto done;
+ }
if (r->io_header.driver_status & SG_ERR_DRIVER_SENSE) {
r->req.sense_len = r->io_header.sb_len_wr;
}
@@ -133,6 +136,7 @@ static void scsi_command_complete(void *opaque, int ret)
r, r->req.tag, status);
scsi_req_complete(&r->req, status);
+done:
if (!r->req.io_canceled) {
scsi_req_unref(&r->req);
}
@@ -186,8 +190,7 @@ static void scsi_read_complete(void * opaque, int ret)
int len;
r->req.aiocb = NULL;
- if (ret) {
- DPRINTF("IO error ret %d\n", ret);
+ if (ret || r->req.io_canceled) {
scsi_command_complete(r, ret);
return;
}
@@ -246,8 +249,7 @@ static void scsi_write_complete(void * opaque, int ret)
DPRINTF("scsi_write_complete() ret = %d\n", ret);
r->req.aiocb = NULL;
- if (ret) {
- DPRINTF("IO error\n");
+ if (ret || r->req.io_canceled) {
scsi_command_complete(r, ret);
return;
}
--
1.9.3
- [Qemu-devel] [PATCH v3 0/7] virtio-scsi: Asynchronous cancellation, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v3 2/7] scsi-generic: Handle canceled request in scsi_command_complete,
Fam Zheng <=
- [Qemu-devel] [PATCH v3 1/7] scsi: Drop scsi_req_abort, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v3 3/7] scsi-bus: Unify request unref in scsi_req_cancel, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v3 5/7] scsi: Introduce scsi_req_cancel_complete, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v3 4/7] scsi: Drop SCSIReqOps.cancel_io, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v3 6/7] scsi: Introduce scsi_req_cancel_async, Fam Zheng, 2014/09/24
- [Qemu-devel] [PATCH v3 7/7] virtio-scsi: Handle TMF request cancellation asynchronously, Fam Zheng, 2014/09/24