qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 12/16] scsi-generic: use plain ioctl


From: Hannes Reinecke
Subject: [Qemu-devel] [PATCH 12/16] scsi-generic: use plain ioctl
Date: Thu, 18 Nov 2010 15:47:36 +0100
User-agent: Heirloom mailx 12.2 01/07/07

aio_ioctl is emulated anyway and currently broken.
So better use 'normal' ioctl here as there are no benefits
on using the emulated async I/O call.

Signed-off-by: Hannes Reinecke <address@hidden>
---
 hw/scsi-generic.c |   21 +++++++--------------
 1 files changed, 7 insertions(+), 14 deletions(-)

diff --git a/hw/scsi-generic.c b/hw/scsi-generic.c
index de37d78..6250ce5 100644
--- a/hw/scsi-generic.c
+++ b/hw/scsi-generic.c
@@ -147,12 +147,8 @@ static void scsi_command_complete(void *opaque, int ret)
 /* Cancel a pending data transfer.  */
 static void scsi_cancel_io(SCSIRequest *req)
 {
-    SCSIGenericReq *r = DO_UPCAST(SCSIGenericReq, req, req);
-
+    /* Nothing to do; cannot abort ioctls :-( */
     DPRINTF("Cancel tag=0x%x\n", req->tag);
-    if (r->req.aiocb)
-        bdrv_aio_cancel(r->req.aiocb);
-    r->req.aiocb = NULL;
 }
 
 static int execute_command(BlockDriverState *bdrv,
@@ -160,6 +156,7 @@ static int execute_command(BlockDriverState *bdrv,
                           BlockDriverCompletionFunc *complete)
 {
     SCSIGenericState *s = DO_UPCAST(SCSIGenericState, qdev, r->req.dev);
+    int ret;
 
     r->io_header.interface_id = 'S';
     r->io_header.dxfer_direction = direction;
@@ -173,13 +170,12 @@ static int execute_command(BlockDriverState *bdrv,
     r->io_header.usr_ptr = r;
     r->io_header.flags |= SG_FLAG_DIRECT_IO;
 
-    r->req.aiocb = bdrv_aio_ioctl(bdrv, SG_IO, &r->io_header, complete, r);
-    if (r->req.aiocb == NULL) {
-        BADF("execute_command: read failed !\n");
-        return -1;
-    }
+    DPRINTF("SG_IO tag=0x%x dxfer=%d iov=%d\n", r->req.tag,
+            r->io_header.dxfer_len, r->io_header.iovec_count);
 
-    return 0;
+    ret = bdrv_ioctl(bdrv, SG_IO, &r->io_header);
+    complete(r, ret);
+    return ret;
 }
 
 static void scsi_read_complete(void * opaque, int ret)
@@ -448,9 +444,6 @@ static void scsi_generic_purge_requests(SCSIGenericState *s)
 
     while (!QTAILQ_EMPTY(&s->qdev.requests)) {
         r = DO_UPCAST(SCSIGenericReq, req, QTAILQ_FIRST(&s->qdev.requests));
-        if (r->req.aiocb) {
-            bdrv_aio_cancel(r->req.aiocb);
-        }
         scsi_remove_request(&r->req);
     }
 }
-- 
1.7.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]