• M
    virtio-scsi: Allocate op blocker reason before blocking · f6758f7d
    Max Reitz 提交于
    s->blocker is really only used in hw/scsi/virtio-scsi.c; the only places
    where it is used in hw/scsi/virtio-scsi-dataplane.c is when it is
    allocated and when it is freed. That does not make a whole lot of sense
    (and is actually wrong because this leads to s->blocker potentially
    being NULL when blk_op_block_all() is called in virtio-scsi.c), so move
    the allocation and destruction of s->blocker to the device realization
    and unrealization in virtio-scsi.c, respectively.
    
    Case in point:
    
    $ echo -e 'eject drv\nquit' | \
        x86_64-softmmu/qemu-system-x86_64 \
            -monitor stdio -machine accel=qtest -display none \
            -object iothread,id=thr -device virtio-scsi-pci,iothread=thr \
            -drive if=none,file=test.qcow2,format=qcow2,id=drv \
            -device scsi-cd,drive=drv
    
    Without this patch:
    
    (qemu) eject drv
    [1]    10102 done
           10103 segmentation fault (core dumped)
    
    With this patch:
    
    (qemu) eject drv
    Device 'drv' is busy: block device is in use by data plane
    (qemu) quit
    Signed-off-by: NMax Reitz <mreitz@redhat.com>
    Message-Id: <1425057113-26940-1-git-send-email-mreitz@redhat.com>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    f6758f7d
virtio-scsi-dataplane.c 9.3 KB