From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44510) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yqlyn-0001qN-OU for qemu-devel@nongnu.org; Fri, 08 May 2015 13:22:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Yqlym-0004Eh-IP for qemu-devel@nongnu.org; Fri, 08 May 2015 13:22:29 -0400 From: Kevin Wolf Date: Fri, 8 May 2015 19:21:32 +0200 Message-Id: <1431105726-3682-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [PATCH 00/34] block: Cache mode for children, reopen overhaul and more List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-block@nongnu.org Cc: kwolf@redhat.com, qemu-devel@nongnu.org, armbru@redhat.com, mreitz@redhat.com First of all, sorry for the lengthy series that attacks more things than could fit in the subject line. However, for the most part the changes are hard to separate: Either it's just infrastructure without a user, or it's a user, but the infrastructure changes wouldn't be complete. The only independent part that could be separated out are the qcow2 patches, but they are a nice demonstration of the new infrastructure somewhere about halfway through the series, so I thought it would be nice to leave them in anyway. Originally, the goal of the series was just to make cache modes configurable for backing files. However, I realised soon that while flags are inherited, the same thing is missing for arbitrary options. And then it turned out that there's bdrv_reopen(), too, and that that needs a bit more work if we don't want it to break... (see KVM Forum talk last year) So this is how it worked out - this series contains: - A common infrastructure for opening child nodes, so that... - ...the block layer knows all the children of a BDS now - ...VMDK allows passing options to individual extents - A node knows from which other node it inherited flags and options; this is respected when recalculating flags and options for child nodes on bdrv_reopen() (i.e. if the node didn't inherit originally from a parent node, it now doesn't on reopen either) - You can now use node name references for backing files - bdrv_reopen() accepts options now (and qcow2 makes use of it) - And finally you can set cache mode options for backing files and other children now (and the reopen behaviour even makes sense) Kevin Wolf (34): qdict: Add qdict_array_entries() qdict: Add qdict_{set,copy}_default() quorum: Use bdrv_open_image() vmdk: Use bdrv_open_image() block: Use macro for cache option names block: Use QemuOpts in bdrv_open_common() block: Move flag inheritance to bdrv_open_inherited() block: Add list of children to BlockDriverState block: Add BlockDriverState.inherits_from block: Fix reopen flag inheritance block: Allow references for backing files block: Allow specifying driver-specific options to reopen qemu-io: Add command 'reopen' qcow2: Factor out qcow2_update_options() qcow2: Move qcow2_update_options() call up qcow2: Move rest of option handling to qcow2_update_options() qcow2: Leave s unchanged on qcow2_update_options() failure qcow2: Fix memory leak in qcow2_update_options() error path qcow2: Make qcow2_update_options() suitable for transactions qcow2: Support updating driver-specific options in reopen block: Consider all block layer options in append_open_options block: Exclude nested options only for children in append_open_options() block: Pass driver-specific options to .bdrv_refresh_filename() block: Keep "driver" in bs->options block: Allow specifying child options in reopen block: reopen: Document option precedence and refactor accordingly block: Add infrastructure for option inheritance block: Introduce bs->explicit_options qemu-iotests: Remove cache mode test without medium block: reopen: Extract QemuOpts for generic block layer options block: Move cache options into options QDict qemu-iotests: Try setting cache mode for children qemu-iotests: Test cache mode option inheritance qemu-iotests: Test reopen with node-name/driver options block.c | 502 +++++++++++++++++++++++++---- block/blkdebug.c | 19 +- block/blkverify.c | 6 +- block/commit.c | 4 +- block/mirror.c | 2 +- block/nbd.c | 10 +- block/qcow2.c | 359 ++++++++++++++------- block/quorum.c | 53 +--- block/vmdk.c | 61 ++-- blockdev.c | 39 +-- include/block/block.h | 20 +- include/block/block_int.h | 24 +- include/qapi/qmp/qdict.h | 4 + qemu-io-cmds.c | 71 +++++ qobject/qdict.c | 102 +++++- tests/qemu-iotests/051 | 16 +- tests/qemu-iotests/051.out | 59 +++- tests/qemu-iotests/132 | 336 ++++++++++++++++++++ tests/qemu-iotests/132.out | 767 +++++++++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/133 | 90 ++++++ tests/qemu-iotests/133.out | 22 ++ tests/qemu-iotests/group | 2 + 22 files changed, 2230 insertions(+), 338 deletions(-) create mode 100755 tests/qemu-iotests/132 create mode 100644 tests/qemu-iotests/132.out create mode 100755 tests/qemu-iotests/133 create mode 100644 tests/qemu-iotests/133.out -- 1.8.3.1