• M
    block: Fix virtual media change for if=none · 7d0d6950
    Markus Armbruster 提交于
    BlockDriverState member removable controls whether virtual media
    change (monitor commands change, eject) is allowed.  It is set when
    the "type hint" is BDRV_TYPE_CDROM or BDRV_TYPE_FLOPPY.
    
    The type hint is only set by drive_init().  It sets BDRV_TYPE_FLOPPY
    for if=floppy.  It sets BDRV_TYPE_CDROM for media=cdrom and if=ide,
    scsi, xen, or none.
    
    if=ide and if=scsi work, because the type hint makes it a CD-ROM.
    if=xen likewise, I think.
    
    For the same reason, if=none works when it's used by ide-drive or
    scsi-disk.  For other guest devices, there are problems:
    
    * fdc: you can't change virtual media
    
        $ qemu [...] -drive if=none,id=foo,... -global isa-fdc.driveA=foo
        QEMU 0.12.50 monitor - type 'help' for more information
        (qemu) eject foo
        Device 'foo' is not removable
    
      unless you add media=cdrom, but that makes it readonly.
    
    * virtio: if you add media=cdrom, you can change virtual media.  If
      you eject, the guest gets I/O errors.  If you change, the guest sees
      the drive's contents suddenly change.
    
    * scsi-generic: if you add media=cdrom, you can change virtual media.
      I didn't test what that does to the guest or the physical device,
      but it can't be pretty.
    Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    7d0d6950
scsi-generic.c 14.7 KB