Il 13/12/2012 10:12, Kevin Wolf ha scritto: >>> There seems to be an issue with the bdrv_aio_[readv/writev] >>> routines. I added some additional tracing in the block and >>> coroutine code, and well, long story short, the coroutine >>> "bdrv_co_io_em" needs to call "qemu_coroutine_yield" before his >>> aio callback "bdrv_co_io_em_complete" invokes >>> "qemu_coroutine_enter". It does not always win this race in my >>> experiments, and qemu aborts with a recursive re-entry error. I >>> don't know this coroutine code well enough to propose a fix -- >>> I'd say maybe use locks but I think that defeats the purpose of >>> using coroutines if I understand them correctly? > > The block layer, like most other qemu functions, is supposed to run > under the qemu_global_mutex (also called BQL). Do you call into it > from a different thread that doesn't take this lock?
Yes, that's the main problem. Paolo