From: Luiz Capitulino <lcapitulino@redhat.com>
To: Anthony Liguori <aliguori@us.ibm.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
qemu-devel@nongnu.org, Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH 08/14] qapi: convert eject (qmp and hmp) to QAPI
Date: Wed, 24 Aug 2011 18:06:20 -0300 [thread overview]
Message-ID: <20110824180620.2f71db1b@doriath> (raw)
In-Reply-To: <1314211389-28915-9-git-send-email-aliguori@us.ibm.com>
On Wed, 24 Aug 2011 13:43:03 -0500
Anthony Liguori <aliguori@us.ibm.com> wrote:
> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
> ---
> blockdev.c | 22 +++++++++++-----------
> blockdev.h | 1 -
> hmp-commands.hx | 3 +--
> hmp.c | 14 ++++++++++++++
> hmp.h | 1 +
> qapi-schema.json | 25 +++++++++++++++++++++++++
> qmp-commands.hx | 3 +--
> 7 files changed, 53 insertions(+), 16 deletions(-)
>
> diff --git a/blockdev.c b/blockdev.c
> index d272659..6b7fc41 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -16,6 +16,7 @@
> #include "sysemu.h"
> #include "hw/qdev.h"
> #include "block_int.h"
> +#include "qmp-commands.h"
>
> static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives);
>
> @@ -644,32 +645,31 @@ out:
> return ret;
> }
>
> -static int eject_device(Monitor *mon, BlockDriverState *bs, int force)
> +static int eject_device(BlockDriverState *bs, int force, Error **errp)
> {
> if (!bdrv_is_removable(bs)) {
> - qerror_report(QERR_DEVICE_NOT_REMOVABLE, bdrv_get_device_name(bs));
> + error_set(errp, QERR_DEVICE_NOT_REMOVABLE, bdrv_get_device_name(bs));
> return -1;
> }
> if (!force && bdrv_is_locked(bs)) {
> - qerror_report(QERR_DEVICE_LOCKED, bdrv_get_device_name(bs));
> + error_set(errp, QERR_DEVICE_LOCKED, bdrv_get_device_name(bs));
> return -1;
> }
> bdrv_close(bs);
> return 0;
> }
>
> -int do_eject(Monitor *mon, const QDict *qdict, QObject **ret_data)
> +void qmp_eject(const char *device, bool has_force, bool force, Error **errp)
> {
> BlockDriverState *bs;
> - int force = qdict_get_try_bool(qdict, "force", 0);
> - const char *filename = qdict_get_str(qdict, "device");
>
> - bs = bdrv_find(filename);
> + bs = bdrv_find(device);
> if (!bs) {
> - qerror_report(QERR_DEVICE_NOT_FOUND, filename);
> - return -1;
> + error_set(errp, QERR_DEVICE_NOT_FOUND, device);
> + return;
> }
> - return eject_device(mon, bs, force);
> +
> + eject_device(bs, force, errp);
> }
>
> int do_block_set_passwd(Monitor *mon, const QDict *qdict,
> @@ -715,7 +715,7 @@ int do_change_block(Monitor *mon, const char *device,
> return -1;
> }
> }
> - if (eject_device(mon, bs, 0) < 0) {
> + if (eject_device(bs, 0, NULL) < 0) {
This will make the change command return an undefined error for errors
caught in eject_device(). I believe this is fixed in patch 13/14? If yes,
the it's probably a good thing to note it in the commit log.
> return -1;
> }
> bdrv_flags = bdrv_is_read_only(bs) ? 0 : BDRV_O_RDWR;
> diff --git a/blockdev.h b/blockdev.h
> index 3587786..badbf01 100644
> --- a/blockdev.h
> +++ b/blockdev.h
> @@ -58,7 +58,6 @@ DriveInfo *drive_init(QemuOpts *arg, int default_to_scsi);
> DriveInfo *add_init_drive(const char *opts);
>
> void do_commit(Monitor *mon, const QDict *qdict);
> -int do_eject(Monitor *mon, const QDict *qdict, QObject **ret_data);
> int do_block_set_passwd(Monitor *mon, const QDict *qdict, QObject **ret_data);
> int do_change_block(Monitor *mon, const char *device,
> const char *filename, const char *fmt);
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index 0ccfb28..bcb789b 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -76,8 +76,7 @@ ETEXI
> .args_type = "force:-f,device:B",
> .params = "[-f] device",
> .help = "eject a removable medium (use -f to force it)",
> - .user_print = monitor_user_noop,
> - .mhandler.cmd_new = do_eject,
> + .mhandler.cmd = hmp_eject,
> },
>
> STEXI
> diff --git a/hmp.c b/hmp.c
> index 47e1ff7..36eb5b9 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -24,3 +24,17 @@ void hmp_info_name(Monitor *mon)
> }
> qapi_free_NameInfo(info);
> }
> +
> +void hmp_eject(Monitor *mon, const QDict *qdict)
> +{
> + int force = qdict_get_try_bool(qdict, "force", 0);
> + const char *device = qdict_get_str(qdict, "device");
> + Error *err = NULL;
> +
> + qmp_eject(device, true, force, &err);
> + if (err) {
> + monitor_printf(mon, "eject: %s\n", error_get_pretty(err));
> + error_free(err);
> + }
> +}
> +
> diff --git a/hmp.h b/hmp.h
> index 5fe73f1..6a552c1 100644
> --- a/hmp.h
> +++ b/hmp.h
> @@ -18,5 +18,6 @@
> #include "qapi-types.h"
>
> void hmp_info_name(Monitor *mon);
> +void hmp_eject(Monitor *mon, const QDict *args);
>
> #endif
> diff --git a/qapi-schema.json b/qapi-schema.json
> index 654409b..934ea81 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -24,3 +24,28 @@
> ##
> { 'command': 'query-name', 'returns': 'NameInfo' }
>
> +##
> +# @eject:
> +#
> +# Ejects a device from a removable drive.
> +#
> +# @device: The name of the device
> +#
> +# @force: @optional If true, eject regardless of whether the drive is locked.
> +# If not specified, the default value is false.
> +#
> +# Returns: Nothing on success
> +# If @device is not a valid block device, DeviceNotFound
> +# If @device is not removable and @force is false, DeviceNotRemovable
> +# If @force is false and @device is locked, DeviceLocked
> +#
> +# Notes: If the @force flag is used, the backing file will be closed
> +# regardless of whether the device is removable. This may result in
> +# a badly broken guest.
> +#
> +# Ejecting a device with no media results in success
> +#
> +# Since: 0.14.0
> +##
We're duplicating the documentation, as it also exists in qmp-commands.hx.
Should we drop it from there? If we do, we'll have to update the script
that generates QMP/qmp-commands.txt.
> +{ 'command': 'eject', 'data': {'device': 'str', '*force': 'bool'} }
> +
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index 03f67da..81d1800 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -89,8 +89,7 @@ EQMP
> .args_type = "force:-f,device:B",
> .params = "[-f] device",
> .help = "eject a removable medium (use -f to force it)",
> - .user_print = monitor_user_noop,
> - .mhandler.cmd_new = do_eject,
> + .mhandler.cmd_new = qmp_marshal_input_eject,
> },
>
> SQMP
next prev parent reply other threads:[~2011-08-24 21:06 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-24 18:42 [Qemu-devel] [PATCH 00/14] Convert commands to QAPI (batch 1) Anthony Liguori
2011-08-24 18:42 ` [Qemu-devel] [PATCH 01/14] qerror: add qerror_report_err() Anthony Liguori
2011-08-24 20:15 ` Luiz Capitulino
2011-09-02 15:59 ` Anthony Liguori
2011-08-24 18:42 ` [Qemu-devel] [PATCH 02/14] qapi: add code generation support for middle mode Anthony Liguori
2011-08-24 18:42 ` [Qemu-devel] [PATCH 03/14] qapi: use middle mode in QMP server Anthony Liguori
2011-08-24 20:20 ` Luiz Capitulino
2011-08-24 20:38 ` Anthony Liguori
2011-08-25 16:24 ` Michael Roth
2011-08-25 16:30 ` Luiz Capitulino
2011-09-02 16:00 ` Anthony Liguori
2011-09-02 16:09 ` Luiz Capitulino
2011-09-02 16:31 ` Michael Roth
2011-09-02 16:45 ` Anthony Liguori
2011-09-02 16:57 ` Luiz Capitulino
2011-08-24 18:42 ` [Qemu-devel] [PATCH 04/14] qapi: convert query-name Anthony Liguori
2011-08-24 20:28 ` Luiz Capitulino
2011-08-24 20:41 ` Anthony Liguori
2011-08-24 21:02 ` Luiz Capitulino
2011-08-24 18:43 ` [Qemu-devel] [PATCH 05/14] block: add unsafe_probe Anthony Liguori
2011-08-24 18:43 ` [Qemu-devel] [PATCH 06/14] monitor: expose readline state Anthony Liguori
2011-08-24 18:43 ` [Qemu-devel] [PATCH 07/14] qerror: add additional parameter to QERR_DEVICE_ENCRYPTED Anthony Liguori
2011-08-24 18:43 ` [Qemu-devel] [PATCH 08/14] qapi: convert eject (qmp and hmp) to QAPI Anthony Liguori
2011-08-24 21:06 ` Luiz Capitulino [this message]
2011-08-25 12:19 ` Kevin Wolf
2011-08-25 13:40 ` Anthony Liguori
2011-08-25 13:52 ` Kevin Wolf
2011-08-25 14:03 ` Avi Kivity
2011-09-02 16:05 ` Anthony Liguori
2011-09-02 16:36 ` Kevin Wolf
2011-08-24 18:43 ` [Qemu-devel] [PATCH 09/14] qapi: convert block_passwd and add set-blockdev-password Anthony Liguori
2011-08-25 12:29 ` Kevin Wolf
2011-08-24 18:43 ` [Qemu-devel] [PATCH 10/14] qapi: add change-vnc-password Anthony Liguori
2011-08-25 9:07 ` Gerd Hoffmann
2011-08-25 13:12 ` Anthony Liguori
2011-08-25 13:33 ` Luiz Capitulino
2011-09-02 16:08 ` Anthony Liguori
2011-08-24 18:43 ` [Qemu-devel] [PATCH 11/14] qapi: add change-vnc-listen Anthony Liguori
2011-08-25 13:32 ` Luiz Capitulino
2011-09-02 16:11 ` Anthony Liguori
2011-08-24 18:43 ` [Qemu-devel] [PATCH 12/14] qapi: introduce change-blockdev Anthony Liguori
2011-08-25 12:46 ` Kevin Wolf
2011-08-25 12:56 ` Anthony Liguori
2011-08-25 13:47 ` Kevin Wolf
2011-08-25 13:50 ` Anthony Liguori
2011-08-25 14:09 ` Luiz Capitulino
2011-08-25 14:21 ` Anthony Liguori
2011-08-25 14:52 ` Luiz Capitulino
2011-08-24 18:43 ` [Qemu-devel] [PATCH 13/14] qapi: convert change Anthony Liguori
2011-08-25 14:43 ` Luiz Capitulino
2011-08-24 18:43 ` [Qemu-devel] [PATCH 14/14] vnc: don't demote authentication protocol when disabling login Anthony Liguori
2011-08-24 20:45 ` Daniel P. Berrange
2011-08-24 20:47 ` Anthony Liguori
2011-08-25 14:55 ` [Qemu-devel] [PATCH 00/14] Convert commands to QAPI (batch 1) Luiz Capitulino
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=20110824180620.2f71db1b@doriath \
--to=lcapitulino@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=kwolf@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/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.