On 8 August 2010 14:11, Kevin Wolf <kw...@redhat.com> wrote: > Am 07.08.2010 02:55, schrieb adq: >> Hi, I've been tracking down why scsi generic devices (using SG_IO) >> don't work any more. After adding debug, I can see that it actually >> submits the scsi CDB in hw/scsi-generic.c/execute_command(), but that >> the hw/scsi-generic.c/scsi_read_complete() callback is never called. >> >> This is because these are done with ioctls, and the posix async ioctl >> code is, I think, broken right now. Some more debugging, led me to >> posix-aio-compat.c/posix_aio_process_queue(): >> >> if (acb->async_context_id != async_context_id) { >> >> The async_context_ids don't match, so the request is never handled. >> This is because the acb->async_context_id field is not initialised in >> posix-aio-compat.c/paio_ioctl() (compare with >> posix-aio-compat.c/paio_submit()). The attached patch adds the missing >> line in. >> >> This seems to fix the problem. Of course, /now/ I'm getting other >> weird problems (as I'm trying to see if I can get slysoft anydvd >> working in a KVM winXP vm), but they need further investigation and >> likely other fixes. >> >> Please forgive me if I'm mistaken in this, I've only just started >> looking at the qemu code. > > The patch looks correct to me. > > Please use git format-patch to generate the patch, so that it contains a > decent commit message and I can apply it with git am. Also, please don't > forget the Signed-off-by line, otherwise we can't accept it.
Hi, please find it attached; I've not used format-patch before, hope this is correct!
From db3cfa4f12ca7e3ed300304ba8a4db15e49b4189 Mon Sep 17 00:00:00 2001 From: Andrew de Quincey <a...@lidskialf.net> Date: Sun, 8 Aug 2010 21:04:50 +0100 Subject: [PATCH] Set the async_context_id field when queuing an async ioctl call Signed-off-by: Andrew de Quincey <a...@lidskialf.net> --- posix-aio-compat.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/posix-aio-compat.c b/posix-aio-compat.c index a67ffe3..efc5968 100644 --- a/posix-aio-compat.c +++ b/posix-aio-compat.c @@ -599,6 +599,7 @@ BlockDriverAIOCB *paio_ioctl(BlockDriverState *bs, int fd, acb->aio_type = QEMU_AIO_IOCTL; acb->aio_fildes = fd; acb->ev_signo = SIGUSR2; + acb->async_context_id = get_async_context_id(); acb->aio_offset = 0; acb->aio_ioctl_buf = buf; acb->aio_ioctl_cmd = req; -- 1.7.2.1