[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 24/45] scsi-disk: Avoid physical/virtual tray sta
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH v2 24/45] scsi-disk: Avoid physical/virtual tray state mismatch |
Date: |
Wed, 3 Aug 2011 15:08:03 +0200 |
When scsi-cd is backed by a physical drive, we want the physical tray
match the virtual one. To that end, we call bdrv_eject() on guest's
load/eject, and bdrv_lock_medium() on guest's prevent/allow removal.
But we don't set the initial state on device model init. Fix that.
While there, also unlock on device model exit.
Signed-off-by: Markus Armbruster <address@hidden>
---
hw/scsi-disk.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 19a1843..f223de6 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -1205,6 +1205,9 @@ static void scsi_destroy(SCSIDevice *dev)
SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
scsi_device_purge_requests(&s->qdev);
+ if (s->qdev.type == TYPE_ROM) {
+ bdrv_lock_medium(s->qdev.conf.bs, 0);
+ }
blockdev_mark_auto_del(s->qdev.conf.bs);
}
@@ -1265,6 +1268,10 @@ static int scsi_initfn(SCSIDevice *dev, uint8_t
scsi_type)
s->qdev.type = scsi_type;
qemu_add_vm_change_state_handler(scsi_dma_restart_cb, s);
bdrv_set_removable(s->bs, scsi_type == TYPE_ROM);
+ if (scsi_type == TYPE_ROM) {
+ bdrv_lock_medium(s->bs, s->tray_locked);
+ bdrv_eject(s->bs, s->tray_open);
+ }
add_boot_device_path(s->qdev.conf.bootindex, &dev->qdev, ",0");
return 0;
}
--
1.7.6
- Re: [Qemu-devel] [PATCH v2 07/45] ide: Use a table to declare which drive kinds accept each command, (continued)
- [Qemu-devel] [PATCH v2 03/45] block: Split change_cb() into change_media_cb(), resize_cb(), Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 01/45] block: Attach non-qdev devices as well, Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 13/45] block: Revert entanglement of bdrv_is_inserted() with tray status, Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 15/45] ide/atapi: Track tray locked state, Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 11/45] scsi-disk: Factor out scsi_disk_emulate_start_stop(), Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 05/45] ide: Clean up case label indentation in ide_exec_cmd(), Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 09/45] ide/atapi: Clean up misleading name in cmd_start_stop_unit(), Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 10/45] ide/atapi: Track tray open/close state, Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 24/45] scsi-disk: Avoid physical/virtual tray state mismatch,
Markus Armbruster <=
- [Qemu-devel] [PATCH v2 33/45] xen: Clean up pci_piix3_xen_ide_unplug()'s test for "not a CD", Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 21/45] ide/atapi: Don't fail eject when tray is already open, Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 25/45] ide: Give vmstate structs internal linkage where possible, Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 34/45] spitz tosa: Simplify "drive is suitable for microdrive" test, Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 42/45] block: Reset buffer alignment on detach, Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 22/45] ide/atapi: Avoid physical/virtual tray state mismatch, Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 26/45] ide/atapi: Preserve tray state on migration, Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 39/45] hw: Trim superfluous #include "block_int.h", Markus Armbruster, 2011/08/03
- [Qemu-devel] [PATCH v2 32/45] savevm: Include writable devices with removable media, Markus Armbruster, 2011/08/03