From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52873) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UoZNb-0006tq-Q5 for qemu-devel@nongnu.org; Mon, 17 Jun 2013 09:22:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UoZNX-0003or-44 for qemu-devel@nongnu.org; Mon, 17 Jun 2013 09:21:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59451) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UoZNW-0003oS-J2 for qemu-devel@nongnu.org; Mon, 17 Jun 2013 09:21:51 -0400 From: Pavel Hrdina Date: Mon, 17 Jun 2013 15:21:41 +0200 Message-Id: <6c33b1e54320663db2ae9c606bde4cb13ca42928.1371474572.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: Subject: [Qemu-devel] [PATCH v3 2/2] block: move the bdrv_dev_change_media_cb() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, stefanha@gmail.com, phrdina@redhat.com, lcapitulino@redhat.com The bdrv_dev_change_media_cb() should be called only for eject and change commands. We should call that function only if that command is successful. What this function does is that it calls the change_media_cb() and also emit the QEVENT_DEVICE_TRAY_MOVED event. If a password is not required, but user provides some, the error is used as warning. Signed-off-by: Pavel Hrdina --- block.c | 8 -------- blockdev.c | 7 +++++++ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/block.c b/block.c index 9fbaf1a..0411c85 100644 --- a/block.c +++ b/block.c @@ -1092,10 +1092,6 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, } QDECREF(options); - if (!bdrv_key_required(bs)) { - bdrv_dev_change_media_cb(bs, true); - } - /* throttling disk I/O limits */ if (bs->io_limits_enabled) { bdrv_io_limits_enable(bs); @@ -1394,8 +1390,6 @@ void bdrv_close(BlockDriverState *bs) } } - bdrv_dev_change_media_cb(bs, false); - /*throttling disk I/O limits*/ if (bs->io_limits_enabled) { bdrv_io_limits_disable(bs); @@ -2846,8 +2840,6 @@ int bdrv_set_key(BlockDriverState *bs, const char *key) bs->valid_key = 0; } else if (!bs->valid_key) { bs->valid_key = 1; - /* call the change callback now, we skipped it on open */ - bdrv_dev_change_media_cb(bs, true); } return ret; } diff --git a/blockdev.c b/blockdev.c index 9937311..3498413 100644 --- a/blockdev.c +++ b/blockdev.c @@ -1022,6 +1022,7 @@ static void eject_device(BlockDriverState *bs, int force, Error **errp) } bdrv_close(bs); + bdrv_dev_change_media_cb(bs, false); } void qmp_eject(const char *device, bool has_force, bool force, Error **errp) @@ -1071,14 +1072,20 @@ static void qmp_bdrv_open_encrypted(BlockDriverState *bs, const char *filename, if (password) { if (bdrv_set_key(bs, password) < 0) { error_set(errp, QERR_INVALID_PASSWORD); + return; } } else { error_set(errp, QERR_DEVICE_ENCRYPTED, bdrv_get_device_name(bs), bdrv_get_encrypted_filename(bs)); + return; } } else if (password) { + /* This is only warning that you shoud not use a password for not + * encrypted device. */ error_set(errp, QERR_DEVICE_NOT_ENCRYPTED, bdrv_get_device_name(bs)); } + + bdrv_dev_change_media_cb(bs, true); } void qmp_change_blockdev(const char *device, const char *filename, -- 1.8.1.4