On 27/02/2015 18:25, Stefan Weil wrote: > block/vdi.c was never written for multi-threaded access, see my comment > in the header of block/vdi.c:
It is not using threads, only coroutines. Preemption points of coroutines are well defined, and I think that the bug could be present even in the initial AIO-based version. > * The code is not thread safe (missing locks for changes in header and > * block table, no problem with current QEMU). > > This was true in the past, but obviously later multi-threaded access was > introduced for QEMU. Locking was added for qcow2 and other drivers in > 2012 and 2013, but never for vdi. qcow2 already had locking (based on AsyncContexts) before the conversion to coroutines. Other drivers implicitly had locking because they were synchronous; locking was added because the conversion to coroutines made them asynchronous. vdi never got its locking because it was already asynchronous. Paolo