From: Paolo Bonzini <pbonzini@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: kwolf@redhat.com, stefano.stabellini@eu.citrix.com,
qemu-devel@nongnu.org, lcapitulino@redhat.com, hare@suse.de,
amit.shah@redhat.com, hch@lst.de
Subject: Re: [Qemu-devel] [PATCH v3 13/27] block: Drop medium lock tracking, ask device models instead
Date: Wed, 07 Sep 2011 09:06:29 +0200 [thread overview]
Message-ID: <4E6717F5.3080404@redhat.com> (raw)
In-Reply-To: <1315328340-6192-14-git-send-email-armbru@redhat.com>
On 09/06/2011 06:58 PM, Markus Armbruster wrote:
> Requires new BlockDevOps member is_medium_locked(). Implement for IDE
> and SCSI CD-ROMs.
>
> Signed-off-by: Markus Armbruster<armbru@redhat.com>
> ---
> block.c | 16 +++++++++-------
> block.h | 7 ++++++-
> block_int.h | 1 -
> blockdev.c | 2 +-
> hw/ide/core.c | 6 ++++++
> hw/scsi-disk.c | 10 ++++++++++
> 6 files changed, 32 insertions(+), 10 deletions(-)
>
> diff --git a/block.c b/block.c
> index 7408fa9..1e4be73 100644
> --- a/block.c
> +++ b/block.c
> @@ -818,6 +818,14 @@ static void bdrv_dev_resize_cb(BlockDriverState *bs)
> }
> }
>
> +bool bdrv_dev_is_medium_locked(BlockDriverState *bs)
> +{
> + if (bs->dev_ops&& bs->dev_ops->is_medium_locked) {
> + return bs->dev_ops->is_medium_locked(bs->dev_opaque);
> + }
> + return false;
> +}
> +
> /*
> * Run consistency checks on an image
> *
> @@ -1890,7 +1898,7 @@ void bdrv_info(Monitor *mon, QObject **ret_data)
> bs_obj = qobject_from_jsonf("{ 'device': %s, 'type': 'unknown', "
> "'removable': %i, 'locked': %i }",
> bs->device_name, bs->removable,
> - bs->locked);
> + bdrv_dev_is_medium_locked(bs));
>
> if (bs->drv) {
> QObject *obj;
> @@ -3060,11 +3068,6 @@ void bdrv_eject(BlockDriverState *bs, int eject_flag)
> }
> }
>
> -int bdrv_is_locked(BlockDriverState *bs)
> -{
> - return bs->locked;
> -}
> -
> /**
> * Lock or unlock the media (if it is locked, the user won't be able
> * to eject it manually).
> @@ -3075,7 +3078,6 @@ void bdrv_set_locked(BlockDriverState *bs, int locked)
>
> trace_bdrv_set_locked(bs, locked);
>
> - bs->locked = locked;
> if (drv&& drv->bdrv_set_locked) {
> drv->bdrv_set_locked(bs, locked);
> }
> diff --git a/block.h b/block.h
> index 5d941e9..396ca0e 100644
> --- a/block.h
> +++ b/block.h
> @@ -37,6 +37,11 @@ typedef struct BlockDevOps {
> */
> void (*change_media_cb)(void *opaque);
> /*
> + * Is the virtual medium locked into the device?
> + * Device models implement this only when device has such a lock.
> + */
> + bool (*is_medium_locked)(void *opaque);
> + /*
> * Runs when the size changed (e.g. monitor command block_resize)
> */
> void (*resize_cb)(void *opaque);
> @@ -94,6 +99,7 @@ void bdrv_detach_dev(BlockDriverState *bs, void *dev);
> void *bdrv_get_attached_dev(BlockDriverState *bs);
> void bdrv_set_dev_ops(BlockDriverState *bs, const BlockDevOps *ops,
> void *opaque);
> +bool bdrv_dev_is_medium_locked(BlockDriverState *bs);
> int bdrv_read(BlockDriverState *bs, int64_t sector_num,
> uint8_t *buf, int nb_sectors);
> int bdrv_write(BlockDriverState *bs, int64_t sector_num,
> @@ -206,7 +212,6 @@ int bdrv_is_sg(BlockDriverState *bs);
> int bdrv_enable_write_cache(BlockDriverState *bs);
> int bdrv_is_inserted(BlockDriverState *bs);
> int bdrv_media_changed(BlockDriverState *bs);
> -int bdrv_is_locked(BlockDriverState *bs);
> void bdrv_set_locked(BlockDriverState *bs, int locked);
> void bdrv_eject(BlockDriverState *bs, int eject_flag);
> void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
> diff --git a/block_int.h b/block_int.h
> index b63c57b..4f7ff3b 100644
> --- a/block_int.h
> +++ b/block_int.h
> @@ -156,7 +156,6 @@ struct BlockDriverState {
> int keep_read_only; /* if true, the media was requested to stay read only */
> int open_flags; /* flags used to open the file, re-used for re-open */
> int removable; /* if true, the media can be removed */
> - int locked; /* if true, the media cannot temporarily be ejected */
> int encrypted; /* if true, the media is encrypted */
> int valid_key; /* if true, a valid encryption key has been set */
> int sg; /* if true, the device is a /dev/sg* */
> diff --git a/blockdev.c b/blockdev.c
> index 049dda5..3f00b2e 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -640,7 +640,7 @@ 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_is_locked(bs)) {
> + if (!force&& 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 34b7b83..b1a73ee 100644
> --- a/hw/ide/core.c
> +++ b/hw/ide/core.c
> @@ -1795,8 +1795,14 @@ void ide_bus_reset(IDEBus *bus)
> bus->dma->ops->reset(bus->dma);
> }
>
> +static bool ide_cd_is_medium_locked(void *opaque)
> +{
> + return ((IDEState *)opaque)->tray_locked;
> +}
> +
> static const BlockDevOps ide_cd_block_ops = {
> .change_media_cb = ide_cd_change_cb,
> + .is_medium_locked = ide_cd_is_medium_locked,
> };
>
> int ide_init_drive(IDEState *s, BlockDriverState *bs, IDEDriveKind kind,
> diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
> index 65783a7..42682d0 100644
> --- a/hw/scsi-disk.c
> +++ b/hw/scsi-disk.c
> @@ -1165,6 +1165,15 @@ static void scsi_destroy(SCSIDevice *dev)
> blockdev_mark_auto_del(s->qdev.conf.bs);
> }
>
> +static bool scsi_cd_is_medium_locked(void *opaque)
> +{
> + return ((SCSIDiskState *)opaque)->tray_locked;
> +}
> +
> +static const BlockDevOps scsi_cd_block_ops = {
> + .is_medium_locked = scsi_cd_is_medium_locked,
> +};
> +
> static int scsi_initfn(SCSIDevice *dev, uint8_t scsi_type)
> {
> SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
> @@ -1199,6 +1208,7 @@ static int scsi_initfn(SCSIDevice *dev, uint8_t scsi_type)
> }
>
> if (scsi_type == TYPE_ROM) {
> + bdrv_set_dev_ops(s->bs,&scsi_cd_block_ops, s);
> s->qdev.blocksize = 2048;
> } else if (scsi_type == TYPE_DISK) {
> s->qdev.blocksize = s->qdev.conf.logical_block_size;
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
next prev parent reply other threads:[~2011-09-07 7:06 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-06 16:58 [Qemu-devel] [PATCH v3 00/27] Block layer cleanup & fixes Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 01/27] ide: Fix ATA command READ to set ATAPI signature for CD-ROM Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 02/27] ide: Use a table to declare which drive kinds accept each command Markus Armbruster
2011-09-07 15:40 ` Kevin Wolf
2011-09-08 7:05 ` Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 03/27] ide: Reject ATA commands specific to drive kinds Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 04/27] ide/atapi: Clean up misleading name in cmd_start_stop_unit() Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 05/27] ide/atapi: Track tray open/close state Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 06/27] scsi-disk: Factor out scsi_disk_emulate_start_stop() Markus Armbruster
2011-09-07 7:04 ` Paolo Bonzini
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 07/27] scsi-disk: Track tray open/close state Markus Armbruster
2011-09-07 7:05 ` Paolo Bonzini
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 08/27] block: Revert entanglement of bdrv_is_inserted() with tray status Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 09/27] block: Drop tray status tracking, no longer used Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 10/27] ide/atapi: Track tray locked state Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 11/27] scsi-disk: " Markus Armbruster
2011-09-07 7:05 ` Paolo Bonzini
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 12/27] block: Leave enforcing tray lock to device models Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 13/27] block: Drop medium lock tracking, ask device models instead Markus Armbruster
2011-09-07 7:06 ` Paolo Bonzini [this message]
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 14/27] block: Rename bdrv_set_locked() to bdrv_lock_medium() Markus Armbruster
2011-09-07 15:53 ` Kevin Wolf
2011-09-08 7:06 ` Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 15/27] ide/atapi: Don't fail eject when tray is already open Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 16/27] scsi-disk: Fix START_STOP to fail when it can't eject Markus Armbruster
2011-09-07 7:08 ` Paolo Bonzini
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 17/27] ide/atapi: Preserve tray state on migration Markus Armbruster
2011-09-07 7:14 ` Paolo Bonzini
2011-09-07 7:35 ` Kevin Wolf
2011-09-07 8:00 ` Paolo Bonzini
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 18/27] block: Clean up remaining users of "removable" Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 19/27] block: Drop BlockDriverState member removable Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 20/27] block: Show whether the virtual tray is open in info block Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 21/27] block: Move BlockConf & friends from block_int.h to block.h Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 22/27] hw: Trim superfluous #include "block_int.h" Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 23/27] block: New bdrv_set_buffer_alignment() Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 24/27] block: Reset buffer alignment on detach Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 25/27] nbd: Clean up use of block_int.h Markus Armbruster
2011-09-06 16:58 ` [Qemu-devel] [PATCH v3 26/27] block: New change_media_cb() parameter load Markus Armbruster
2011-09-06 16:59 ` [Qemu-devel] [PATCH v3 27/27] ide/atapi scsi-disk: Make monitor eject -f, then change work Markus Armbruster
2011-09-07 7:09 ` Paolo Bonzini
2011-09-08 11:40 ` [Qemu-devel] [PATCH v3 00/27] Block layer cleanup & fixes Kevin Wolf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E6717F5.3080404@redhat.com \
--to=pbonzini@redhat.com \
--cc=amit.shah@redhat.com \
--cc=armbru@redhat.com \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=kwolf@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefano.stabellini@eu.citrix.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.