Skip to content
  • Kevin Wolf's avatar
    7c1f51bf
    nbd/server: Fix drained_poll to wake coroutine in right AioContext · 7c1f51bf
    Kevin Wolf authored
    
    
    nbd_drained_poll() generally runs in the main thread, not whatever
    iothread the NBD server coroutine is meant to run in, so it can't
    directly reenter the coroutines to wake them up.
    
    The code seems to have the right intention, it specifies the correct
    AioContext when it calls qemu_aio_coroutine_enter(). However, this
    functions doesn't schedule the coroutine to run in that AioContext, but
    it assumes it is already called in the home thread of the AioContext.
    
    To fix this, add a new thread-safe qio_channel_wake_read() that can be
    called in the main thread to wake up the coroutine in its AioContext,
    and use this in nbd_drained_poll().
    
    Cc: qemu-stable@nongnu.org
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    Message-Id: <20230517152834.277483-3-kwolf@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    7c1f51bf
    nbd/server: Fix drained_poll to wake coroutine in right AioContext
    Kevin Wolf authored
    
    
    nbd_drained_poll() generally runs in the main thread, not whatever
    iothread the NBD server coroutine is meant to run in, so it can't
    directly reenter the coroutines to wake them up.
    
    The code seems to have the right intention, it specifies the correct
    AioContext when it calls qemu_aio_coroutine_enter(). However, this
    functions doesn't schedule the coroutine to run in that AioContext, but
    it assumes it is already called in the home thread of the AioContext.
    
    To fix this, add a new thread-safe qio_channel_wake_read() that can be
    called in the main thread to wake up the coroutine in its AioContext,
    and use this in nbd_drained_poll().
    
    Cc: qemu-stable@nongnu.org
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    Message-Id: <20230517152834.277483-3-kwolf@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Loading