[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 27/27] ide/atapi scsi-disk: Make monitor eject -f
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH v3 27/27] ide/atapi scsi-disk: Make monitor eject -f, then change work |
Date: |
Tue, 6 Sep 2011 18:59:00 +0200 |
change fails while the tray is locked by the guest. eject -f forces
it open and removes any media. Unfortunately, the tray closes again
instantly. Since the lock remains as it is, there is no way to insert
another medium unless the guest voluntarily unlocks.
Fix by leaving the tray open after monitor eject.
Signed-off-by: Markus Armbruster <address@hidden>
---
blockdev.c | 3 ++-
hw/ide/core.c | 1 +
hw/scsi-disk.c | 1 +
3 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index 154cc84..0827bf7 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -635,7 +635,8 @@ static int eject_device(Monitor *mon, BlockDriverState *bs,
int force)
qerror_report(QERR_DEVICE_NOT_REMOVABLE, bdrv_get_device_name(bs));
return -1;
}
- if (!force && bdrv_dev_is_medium_locked(bs)) {
+ if (!force && !bdrv_dev_is_tray_open(bs)
+ && bdrv_dev_is_medium_locked(bs)) {
qerror_report(QERR_DEVICE_LOCKED, bdrv_get_device_name(bs));
return -1;
}
diff --git a/hw/ide/core.c b/hw/ide/core.c
index bc83c46..db144aa 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -789,6 +789,7 @@ static void ide_cd_change_cb(void *opaque, bool load)
IDEState *s = opaque;
uint64_t nb_sectors;
+ s->tray_open = !load;
bdrv_get_geometry(s->bs, &nb_sectors);
s->nb_sectors = nb_sectors;
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index f5f1d82..4a60820 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -1175,6 +1175,7 @@ static void scsi_destroy(SCSIDevice *dev)
static void scsi_cd_change_media_cb(void *opaque, bool load)
{
+ ((SCSIDiskState *)opaque)->tray_open = !load;
}
static bool scsi_cd_is_tray_open(void *opaque)
--
1.7.6
- Re: [Qemu-devel] [PATCH v3 06/27] scsi-disk: Factor out scsi_disk_emulate_start_stop(), (continued)
- [Qemu-devel] [PATCH v3 01/27] ide: Fix ATA command READ to set ATAPI signature for CD-ROM, Markus Armbruster, 2011/09/06
- [Qemu-devel] [PATCH v3 20/27] block: Show whether the virtual tray is open in info block, Markus Armbruster, 2011/09/06
- [Qemu-devel] [PATCH v3 26/27] block: New change_media_cb() parameter load, Markus Armbruster, 2011/09/06
- [Qemu-devel] [PATCH v3 15/27] ide/atapi: Don't fail eject when tray is already open, Markus Armbruster, 2011/09/06
- [Qemu-devel] [PATCH v3 13/27] block: Drop medium lock tracking, ask device models instead, Markus Armbruster, 2011/09/06
- [Qemu-devel] [PATCH v3 24/27] block: Reset buffer alignment on detach, Markus Armbruster, 2011/09/06
- [Qemu-devel] [PATCH v3 25/27] nbd: Clean up use of block_int.h, Markus Armbruster, 2011/09/06
- [Qemu-devel] [PATCH v3 23/27] block: New bdrv_set_buffer_alignment(), Markus Armbruster, 2011/09/06
- [Qemu-devel] [PATCH v3 27/27] ide/atapi scsi-disk: Make monitor eject -f, then change work,
Markus Armbruster <=
- [Qemu-devel] [PATCH v3 18/27] block: Clean up remaining users of "removable", Markus Armbruster, 2011/09/06
- [Qemu-devel] [PATCH v3 14/27] block: Rename bdrv_set_locked() to bdrv_lock_medium(), Markus Armbruster, 2011/09/06
- Re: [Qemu-devel] [PATCH v3 00/27] Block layer cleanup & fixes, Kevin Wolf, 2011/09/08