[Top][All Lists]
[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
- [Qemu-devel] [PATCH 12/16] scsi-generic: use plain ioctl,
Hannes Reinecke <=