Am 09.02.2023 um 16:45 hat Emanuele Giuseppe Esposito geschrieben: > When calling bdrv_getlength() in handle_aiocb_write_zeroes(), the > function creates a new coroutine and then waits that it finishes using > AIO_WAIT_WHILE. > The problem is that this function could also run in a worker thread, > that has a different AioContext from main loop and iothreads, therefore > in AIO_WAIT_WHILE we will have in_aio_context_home_thread(ctx) == false > and therefore > assert(qemu_get_current_aio_context() == qemu_get_aio_context()); > in the else branch will fail, crashing QEMU. > > Aside from that, bdrv_getlength() is wrong also conceptually, because > it reads the BDS graph from another thread and is not protected by > any lock. > > Replace it with raw_co_getlength, that doesn't create a coroutine and > doesn't read the BDS graph. > > Signed-off-by: Emanuele Giuseppe Esposito <eespo...@redhat.com>
Thanks, applied to the block branch. Kevin