• K
    qed: Use bottom half to resume waiting requests · 3b7cd9fd
    Kevin Wolf 提交于
    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: NKevin Wolf <kwolf@redhat.com>
    Reviewed-by: NEric Blake <eblake@redhat.com>
    Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
    3b7cd9fd
qed.c 50.4 KB