• P
    nbd: make it thread-safe, fix qcow2 over nbd · 6bdcc018
    Paolo Bonzini 提交于
    NBD is not thread safe, because it accesses s->in_flight without
    a CoMutex.  Fixing this will be required for multiqueue.
    CoQueue doesn't have spurious wakeups but, when another coroutine can
    run between qemu_co_queue_next's wakeup and qemu_co_queue_wait's
    re-locking of the mutex, the wait condition can become false and
    a loop is necessary.
    
    In fact, it turns out that the loop is necessary even without this
    multi-threaded scenario.  A particular sequence of coroutine wakeups
    is happening ~80% of the time when starting a guest with qcow2 image
    served over NBD (i.e. qemu-nbd --format=raw, and QEMU's -drive option
    has -format=qcow2).  This patch fixes that issue too.
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    6bdcc018
nbd-client.c 12.1 KB