• M
    scsi: Clean up duplicated error in legacy if=scsi code · fa617181
    Markus Armbruster 提交于
    Commit a818a4b6 changed scsi_bus_legacy_handle_cmdline() to report
    errors from scsi_bus_legacy_add_drive() with error_report() in
    addition to returning them.  That's inappropriate.
    
    Two kinds of callers:
    
    1. realize methods (devices "esp", "virtio-scsi-device" and
       "spapr-vscsi")
    
       The error object gets passed up the call chain until it gets
       reported again and freed.
    
       Example:
    
       $ qemu-system-arm -M virt -S -display none \
       > -drive if=scsi,id=foo,bus=1,file=tmp.qcow2 \
       > -device nec-usb-xhci -device usb-storage,drive=foo \
       > -device virtio-scsi-pci
       qemu-system-arm: -drive if=scsi,id=foo,bus=1,file=tmp.qcow2: Property 'scsi-disk.drive' can't take value 'foo', it's in use
       qemu-system-arm: -drive if=scsi,id=foo,bus=1,file=tmp.qcow2: Setting drive property failed
       qemu-system-arm: -device virtio-scsi-pci: Setting drive property failed
       qemu-system-arm: -device virtio-scsi-pci: Device initialization failed
       qemu-system-arm: -device virtio-scsi-pci: Device 'virtio-scsi-pci' could not be initialized
    
       The second message in this error cascade comes from
       scsi_bus_legacy_handle_cmdline().  The error object then gets
       passed up to the qdev_init() called from
       virtio_scsi_pci_init_pci(), which reports it again.
    
    2. init methods (devices "am53c974", "dc390", "lsi53c895a",
       "lsi53c810", "megasas", "megasas-gen2")
    
       init methods need to report their errors with qerror_report().
       These don't.  The inappropriate error_report() papers over the bug.
    
       error_report() isn't the same as qerror_report() in QMP context,
       but this can't actually happen: QMP can still only hot-plug, and
       callers call scsi_bus_legacy_handle_cmdline() only on cold-plug.
       Except for sysbus_esp_realize(), but that can't be hot-plugged at
       all, as far as I can tell.
    
    Fix the init methods and drop the inappropriate error_report() in
    scsi_bus_legacy_handle_cmdline().
    Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: NPeter Crosthwaite <peter.crosthwaite@xilinx.com>
    Message-Id: <1425925048-15482-2-git-send-email-armbru@redhat.com>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    fa617181
lsi53c895a.c 62.0 KB