From patchwork Fri Mar 18 18:21:20 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Wolf X-Patchwork-Id: 8623081 Return-Path: X-Original-To: patchwork-qemu-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 650709F6E1 for ; Fri, 18 Mar 2016 18:31:41 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 2593D20225 for ; Fri, 18 Mar 2016 18:31:40 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AC4C2201FE for ; Fri, 18 Mar 2016 18:31:38 +0000 (UTC) Received: from localhost ([::1]:45656 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1agzBR-000564-Uh for patchwork-qemu-devel@patchwork.kernel.org; Fri, 18 Mar 2016 14:31:37 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36637) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1agz2A-0004Fl-PG for qemu-devel@nongnu.org; Fri, 18 Mar 2016 14:22:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1agz28-0007Aa-E7 for qemu-devel@nongnu.org; Fri, 18 Mar 2016 14:22:02 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44493) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1agz23-000787-D4; Fri, 18 Mar 2016 14:21:55 -0400 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 (Postfix) with ESMTPS id 1D03BC050062; Fri, 18 Mar 2016 18:21:55 +0000 (UTC) Received: from noname.redhat.com (ovpn-116-83.ams2.redhat.com [10.36.116.83]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u2IILZO2021202; Fri, 18 Mar 2016 14:21:53 -0400 From: Kevin Wolf To: qemu-block@nongnu.org Date: Fri, 18 Mar 2016 19:21:20 +0100 Message-Id: <1458325289-17848-12-git-send-email-kwolf@redhat.com> In-Reply-To: <1458325289-17848-1-git-send-email-kwolf@redhat.com> References: <1458325289-17848-1-git-send-email-kwolf@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: kwolf@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com Subject: [Qemu-devel] [PATCH 11/20] block/qapi: Use blk_enable_write_cache() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Now that WCE is handled on the BlockBackend level, the flag is meaningless for BDSes. As the schema requires us to fill the field, we return an enabled write cache for them. Note that this means that querying the BlockBackend name may return writethrough as the cache information, whereas querying the node-name of the root of that same BlockBackend will return writeback. This may appear odd at first, but it actually makes sense because it correctly repesents the layer that implements the WCE handling. This becomes more apparent when you consider nodes that are the root node of multiple BlockBackends, where each BB can have its own WCE setting. Signed-off-by: Kevin Wolf Reviewed-by: Max Reitz --- block.c | 2 +- block/qapi.c | 7 +++--- include/block/qapi.h | 3 ++- tests/qemu-iotests/142 | 7 +++++- tests/qemu-iotests/142.out | 57 ++++++++++++++++++++++++++++++++++++++-------- 5 files changed, 60 insertions(+), 16 deletions(-) diff --git a/block.c b/block.c index 9271dbb..4e95d01 100644 --- a/block.c +++ b/block.c @@ -2917,7 +2917,7 @@ BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp) list = NULL; QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) { - BlockDeviceInfo *info = bdrv_block_device_info(bs, errp); + BlockDeviceInfo *info = bdrv_block_device_info(NULL, bs, errp); if (!info) { qapi_free_BlockDeviceInfoList(list); return NULL; diff --git a/block/qapi.c b/block/qapi.c index 6a4869a..f01894a 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -33,7 +33,8 @@ #include "qapi/qmp/types.h" #include "sysemu/block-backend.h" -BlockDeviceInfo *bdrv_block_device_info(BlockDriverState *bs, Error **errp) +BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk, + BlockDriverState *bs, Error **errp) { ImageInfo **p_image_info; BlockDriverState *bs0; @@ -47,7 +48,7 @@ BlockDeviceInfo *bdrv_block_device_info(BlockDriverState *bs, Error **errp) info->cache = g_new(BlockdevCacheInfo, 1); *info->cache = (BlockdevCacheInfo) { - .writeback = bdrv_enable_write_cache(bs), + .writeback = blk ? blk_enable_write_cache(blk) : true, .direct = !!(bs->open_flags & BDRV_O_NOCACHE), .no_flush = !!(bs->open_flags & BDRV_O_NO_FLUSH), }; @@ -342,7 +343,7 @@ static void bdrv_query_info(BlockBackend *blk, BlockInfo **p_info, if (bs && bs->drv) { info->has_inserted = true; - info->inserted = bdrv_block_device_info(bs, errp); + info->inserted = bdrv_block_device_info(blk, bs, errp); if (info->inserted == NULL) { goto err; } diff --git a/include/block/qapi.h b/include/block/qapi.h index 327549d..82ba4b6 100644 --- a/include/block/qapi.h +++ b/include/block/qapi.h @@ -29,7 +29,8 @@ #include "block/block.h" #include "block/snapshot.h" -BlockDeviceInfo *bdrv_block_device_info(BlockDriverState *bs, Error **errp); +BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk, + BlockDriverState *bs, Error **errp); int bdrv_query_snapshot_info_list(BlockDriverState *bs, SnapshotInfoList **p_list, Error **errp); diff --git a/tests/qemu-iotests/142 b/tests/qemu-iotests/142 index 517fb30..8bbbfde 100755 --- a/tests/qemu-iotests/142 +++ b/tests/qemu-iotests/142 @@ -134,7 +134,8 @@ echo # First check the inherited cache mode after opening the image. -hmp_cmds="info block image +hmp_cmds="info block none0 +info block image info block file info block backing info block backing-file" @@ -164,6 +165,7 @@ echo # new cache mode is specified in the flags, not as an option. hmp_cmds='qemu-io none0 "reopen -c none" +info block none0 info block image info block file info block backing @@ -179,6 +181,7 @@ echo # new cache mode is specified as an option, not in the flags. hmp_cmds='qemu-io none0 "reopen -o cache.direct=on" +info block none0 info block image info block file info block backing @@ -214,6 +217,7 @@ echo # options from its parent node. hmp_cmds="qemu-io none0 \"reopen -o cache.writeback=off,cache.direct=on,cache.no-flush=on\" +info block none0 info block image info block blkdebug info block file" @@ -321,6 +325,7 @@ echo "--- Basic reopen ---" echo hmp_cmds='qemu-io none0 "reopen -o backing.cache.direct=on" +info block none0 info block image info block file info block backing diff --git a/tests/qemu-iotests/142.out b/tests/qemu-iotests/142.out index 32dc802..c922490 100644 --- a/tests/qemu-iotests/142.out +++ b/tests/qemu-iotests/142.out @@ -39,9 +39,11 @@ cache.direct=on on none0 Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.direct=on on file Cache mode: writeback + Cache mode: writeback Cache mode: writeback, direct Cache mode: writeback Cache mode: writeback @@ -49,6 +51,7 @@ cache.direct=on on file cache.direct=on on backing Cache mode: writeback Cache mode: writeback + Cache mode: writeback Cache mode: writeback, direct Cache mode: writeback, direct @@ -56,6 +59,7 @@ cache.direct=on on backing-file Cache mode: writeback Cache mode: writeback Cache mode: writeback + Cache mode: writeback Cache mode: writeback, direct @@ -64,6 +68,7 @@ cache.writeback=off on none0 Cache mode: writeback Cache mode: writeback Cache mode: writeback + Cache mode: writeback cache.writeback=off on file QEMU_PROG: -drive if=none,file=TEST_DIR/t.qcow2,backing.file.filename=TEST_DIR/t.qcow2.base,node-name=image,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,file.cache.writeback=off: Can't set writethrough mode except for the root @@ -80,9 +85,11 @@ cache.no-flush=on on none0 Cache mode: writeback, ignore flushes Cache mode: writeback, ignore flushes Cache mode: writeback, ignore flushes + Cache mode: writeback, ignore flushes cache.no-flush=on on file Cache mode: writeback + Cache mode: writeback Cache mode: writeback, ignore flushes Cache mode: writeback Cache mode: writeback @@ -90,6 +97,7 @@ cache.no-flush=on on file cache.no-flush=on on backing Cache mode: writeback Cache mode: writeback + Cache mode: writeback Cache mode: writeback, ignore flushes Cache mode: writeback, ignore flushes @@ -97,6 +105,7 @@ cache.no-flush=on on backing-file Cache mode: writeback Cache mode: writeback Cache mode: writeback + Cache mode: writeback Cache mode: writeback, ignore flushes --- Cache modes after reopen (live snapshot) --- @@ -182,24 +191,28 @@ cache.direct=on on none0 Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.direct=on on file Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.direct=on on backing Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.direct=on on backing-file Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.writeback=off on none0 @@ -207,6 +220,7 @@ cache.writeback=off on none0 Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.writeback=off on file QEMU_PROG: -drive if=none,file=TEST_DIR/t.qcow2,backing.file.filename=TEST_DIR/t.qcow2.base,node-name=image,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,file.cache.writeback=off: Can't set writethrough mode except for the root @@ -223,9 +237,11 @@ cache.no-flush=on on none0 Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.no-flush=on on file Cache mode: writeback, direct + Cache mode: writeback, direct Cache mode: writeback, direct, ignore flushes Cache mode: writeback, direct Cache mode: writeback, direct @@ -233,6 +249,7 @@ cache.no-flush=on on file cache.no-flush=on on backing Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct Cache mode: writeback, direct, ignore flushes Cache mode: writeback, direct, ignore flushes @@ -240,6 +257,7 @@ cache.no-flush=on on backing-file Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct Cache mode: writeback, direct, ignore flushes --- Change cache modes with reopen (qemu-io command, options) --- @@ -249,24 +267,28 @@ cache.direct=on on none0 Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.direct=on on file Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.direct=on on backing Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.direct=on on backing-file Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.writeback=off on none0 @@ -274,6 +296,7 @@ cache.writeback=off on none0 Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.writeback=off on file QEMU_PROG: -drive if=none,file=TEST_DIR/t.qcow2,backing.file.filename=TEST_DIR/t.qcow2.base,node-name=image,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,file.cache.writeback=off: Can't set writethrough mode except for the root @@ -290,9 +313,11 @@ cache.no-flush=on on none0 Cache mode: writeback, direct, ignore flushes Cache mode: writeback, direct, ignore flushes Cache mode: writeback, direct, ignore flushes + Cache mode: writeback, direct, ignore flushes cache.no-flush=on on file Cache mode: writeback, direct + Cache mode: writeback, direct Cache mode: writeback, direct, ignore flushes Cache mode: writeback, direct Cache mode: writeback, direct @@ -300,6 +325,7 @@ cache.no-flush=on on file cache.no-flush=on on backing Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct Cache mode: writeback, direct, ignore flushes Cache mode: writeback, direct, ignore flushes @@ -307,6 +333,7 @@ cache.no-flush=on on backing-file Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct Cache mode: writeback, direct, ignore flushes --- Change cache modes after snapshot --- @@ -389,6 +416,7 @@ cache.no-flush=on on backing-file Cache mode: writethrough, direct, ignore flushes Cache mode: writeback, direct, ignore flushes + Cache mode: writeback, direct, ignore flushes Cache mode: writeback, ignore flushes === Check that referenced BDSes don't inherit === @@ -422,28 +450,28 @@ cache.direct=on on backing-file cache.writeback=off on blk - Cache mode: writethrough + Cache mode: writeback Cache mode: writeback Cache mode: writeback Cache mode: writeback cache.writeback=off on file Cache mode: writeback - Cache mode: writethrough + Cache mode: writeback Cache mode: writeback Cache mode: writeback cache.writeback=off on backing Cache mode: writeback Cache mode: writeback - Cache mode: writethrough + Cache mode: writeback Cache mode: writeback cache.writeback=off on backing-file Cache mode: writeback Cache mode: writeback Cache mode: writeback - Cache mode: writethrough + Cache mode: writeback cache.no-flush=on on blk @@ -511,7 +539,7 @@ cache.writeback=off on blk cache.writeback=off on file Cache mode: writeback Cache mode: writeback - Cache mode: writethrough + Cache mode: writeback Cache mode: writeback Cache mode: writeback @@ -519,7 +547,7 @@ cache.writeback=off on backing Cache mode: writeback Cache mode: writeback Cache mode: writeback - Cache mode: writethrough + Cache mode: writeback Cache mode: writeback cache.writeback=off on backing-file @@ -527,7 +555,7 @@ cache.writeback=off on backing-file Cache mode: writeback Cache mode: writeback Cache mode: writeback - Cache mode: writethrough + Cache mode: writeback cache.no-flush=on on blk @@ -593,21 +621,21 @@ cache.writeback=off on blk cache.writeback=off on file Cache mode: writeback, direct - Cache mode: writethrough + Cache mode: writeback Cache mode: writeback Cache mode: writeback cache.writeback=off on backing Cache mode: writeback, direct Cache mode: writeback - Cache mode: writethrough + Cache mode: writeback Cache mode: writeback cache.writeback=off on backing-file Cache mode: writeback, direct Cache mode: writeback Cache mode: writeback - Cache mode: writethrough + Cache mode: writeback cache.no-flush=on on blk @@ -644,9 +672,11 @@ cache.direct=on on none0 Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct + Cache mode: writeback, direct cache.direct=on on file Cache mode: writeback + Cache mode: writeback Cache mode: writeback, direct Cache mode: writeback, direct Cache mode: writeback, direct @@ -654,12 +684,14 @@ cache.direct=on on file cache.direct=on on backing Cache mode: writeback Cache mode: writeback + Cache mode: writeback Cache mode: writeback, direct Cache mode: writeback, direct cache.direct=on on backing-file Cache mode: writeback Cache mode: writeback + Cache mode: writeback Cache mode: writeback, direct Cache mode: writeback, direct @@ -667,6 +699,7 @@ cache.direct=on on backing-file cache.writeback=off on none0 Cache mode: writethrough Cache mode: writeback + Cache mode: writeback Cache mode: writeback, direct Cache mode: writeback, direct @@ -683,11 +716,13 @@ QEMU_PROG: -drive if=none,file=TEST_DIR/t.qcow2,backing.file.filename=TEST_DIR/t cache.no-flush=on on none0 Cache mode: writeback, ignore flushes Cache mode: writeback, ignore flushes + Cache mode: writeback, ignore flushes Cache mode: writeback, direct, ignore flushes Cache mode: writeback, direct, ignore flushes cache.no-flush=on on file Cache mode: writeback + Cache mode: writeback Cache mode: writeback, ignore flushes Cache mode: writeback, direct Cache mode: writeback, direct @@ -695,12 +730,14 @@ cache.no-flush=on on file cache.no-flush=on on backing Cache mode: writeback Cache mode: writeback + Cache mode: writeback Cache mode: writeback, direct, ignore flushes Cache mode: writeback, direct, ignore flushes cache.no-flush=on on backing-file Cache mode: writeback Cache mode: writeback + Cache mode: writeback Cache mode: writeback, direct Cache mode: writeback, direct, ignore flushes