On Fri, May 26, 2017 at 10:21:42PM +0200, 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: Stefan Hajnoczi <stefa...@redhat.com>
signature.asc
Description: PGP signature