From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32781) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YKrsO-0003Ee-IE for qemu-devel@nongnu.org; Mon, 09 Feb 2015 12:12:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YKrsN-0006Eo-GK for qemu-devel@nongnu.org; Mon, 09 Feb 2015 12:12:00 -0500 Received: from mx1.redhat.com ([209.132.183.28]:38840) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YKrsN-0006DW-6t for qemu-devel@nongnu.org; Mon, 09 Feb 2015 12:11:59 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t19HBwS2012212 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Mon, 9 Feb 2015 12:11:58 -0500 From: Max Reitz Date: Mon, 9 Feb 2015 12:11:18 -0500 Message-Id: <1423501897-30410-19-git-send-email-mreitz@redhat.com> In-Reply-To: <1423501897-30410-1-git-send-email-mreitz@redhat.com> References: <1423501897-30410-1-git-send-email-mreitz@redhat.com> Subject: [Qemu-devel] [PATCH v2 18/37] blockdev: Use BB for blockdev-backup transaction List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Markus Armbruster , Max Reitz , Stefan Hajnoczi , John Snow When preparing a blockdev-backup transaction, the BlockBackend should be used because there may be no medium associated to the BB (which would make bdrv_find() fail, whereas blk_by_name() does not). This does not make a real difference because blockdev-backup will fail without a medium anyway; however, it will have an impact on the error returned ("device not found" vs. "no medium"). Signed-off-by: Max Reitz Reviewed-by: Eric Blake --- blockdev.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/blockdev.c b/blockdev.c index c4059cc..f669974 100644 --- a/blockdev.c +++ b/blockdev.c @@ -1562,27 +1562,27 @@ static void blockdev_backup_prepare(BlkTransactionState *common, Error **errp) { BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common); BlockdevBackup *backup; - BlockDriverState *bs, *target; + BlockBackend *blk, *target; Error *local_err = NULL; assert(common->action->kind == TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP); backup = common->action->blockdev_backup; - bs = bdrv_find(backup->device); - if (!bs) { + blk = blk_by_name(backup->device); + if (!blk) { error_set(errp, QERR_DEVICE_NOT_FOUND, backup->device); return; } - target = bdrv_find(backup->target); + target = blk_by_name(backup->target); if (!target) { error_set(errp, QERR_DEVICE_NOT_FOUND, backup->target); return; } /* AioContext is released in .clean() */ - state->aio_context = bdrv_get_aio_context(bs); - if (state->aio_context != bdrv_get_aio_context(target)) { + state->aio_context = blk_get_aio_context(blk); + if (state->aio_context != blk_get_aio_context(target)) { state->aio_context = NULL; error_setg(errp, "Backup between two IO threads is not implemented"); return; @@ -1600,7 +1600,10 @@ static void blockdev_backup_prepare(BlkTransactionState *common, Error **errp) return; } - state->bs = bs; + /* qmp_blockdev_backup() would have failed otherwise */ + assert(blk_bs(blk)); + + state->bs = blk_bs(blk); state->job = state->bs->job; } -- 2.1.0