On 05/26/2017 03:21 PM, Kevin Wolf wrote: > The qed driver serialises allocating write requests. When the active > allocation is finished, the AIO callback is called, but after this, the > next allocating request is immediately processed instead of leaving the > coroutine. Resuming another allocation request in the same request > coroutine means that the request now runs in the wrong coroutine. > > The following is one of the possible effects of this: The completed > request will generally reenter its request coroutine in a bottom half, > expecting that it completes the request in bdrv_driver_pwritev(). > However, if the second request actually yielded before leaving the > coroutine, the reused request coroutine is in an entirely different > place and is reentered prematurely. Not a good idea. > > Let's make sure that we exit the coroutine after completing the first > request by resuming the next allocating request only with a bottom > half. > > Signed-off-by: Kevin Wolf <kw...@redhat.com> > --- > block/qed.c | 13 ++++++++++--- > 1 file changed, 10 insertions(+), 3 deletions(-)
Reviewed-by: Eric Blake <ebl...@redhat.com> -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature