Markus Armbruster <arm...@redhat.com> writes: > Paolo Bonzini <pbonz...@redhat.com> writes: > >> Il 04/12/2013 05:55, Alexey Kardashevskiy ha scritto: >>> Normally the user is expected to eject DVD if it is not locked by >>> the guest. eject_device() makes few checks and calls bdrv_close() >>> if DVD is not in use. >>> >>> However it is still possible to eject DVD even if it is in use. >>> For that, QEMU sets "eject requested" flag, the guest reads it, issues >>> ALLOW_MEDIUM_REMOVAL(enable=1) and START_STOP(start=0). But in this case, >>> bdrv_close() is not called anywhere so it remains "inserted" in QEMU's >>> terms. >> >> This is expected behavior, and matches what IDE does. >> >> Markus, can you confirm? > > Confirmed. See commit 4be9762. > > Alexey, monitor commands eject does two things: it first opens the tray, > and if that works, it removes the medium. > > If the tray is locked closed, it tells the device model that eject was > requested. Works just like the physical eject button. > > With -f, it then rips out the medium. This is similar to opening the > tray with a unbent paperclip. Let's ignore this case. > > The scsi-cd device model tells the guest about the eject request. A > well-behaved guest will then command the device to unlock and open the > tray. > > The guest uses the same commands on behalf of its applications, > e.g. /usr/bin/eject. > > Your patch changes behavior of "eject /dev/sr0 && eject -t /dev/sr0": > you no longer get the same medium back. You normally do with real > hardware.
Alexey asked me for details on IRC. $ qemu -nodefaults -monitor stdio -S -machine accel=kvm -m 512 -display vnc=:0 -device cirrus-vga -drive if=none,id=disk,file=test.qcow2 -device ide-hd,drive=disk,bus=ide.0 -drive if=none,id=cd,file=f16.iso -device ide-cd,drive=cd,bus=ide.1 QEMU 1.7.50 monitor - type 'help' for more information (qemu) info block cd cd: f16.iso (raw) Removable device: not locked, tray closed Boot the guest (Fedora 16, no X) (qemu) c The guest locked the tray: (qemu) info block cd cd: f16.iso (raw) Removable device: locked, tray closed In the guest, log in as root on the console, and run # eject /dev/sr0 Makes the guest open the tray: (qemu) info block cd cd: f16.iso (raw) Removable device: locked, tray open In the guest, run # eject -t /dev/sr0 Makes the guest close the tray: (qemu) info block cd cd: f16.iso (raw) Removable device: locked, tray closed Verify the guest can access the medium: # mount -r /dev/sr0 /mnt > The somewhat unfortunate consequence is that monitor command eject can > only remove the medium when the tray is not locked.