From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41683) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZvzrI-00010L-N0 for qemu-devel@nongnu.org; Mon, 09 Nov 2015 22:44:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZvzrH-0001N1-M4 for qemu-devel@nongnu.org; Mon, 09 Nov 2015 22:44:36 -0500 From: Max Reitz Date: Tue, 10 Nov 2015 04:44:15 +0100 Message-Id: <1447127063-4662-1-git-send-email-mreitz@redhat.com> Subject: [Qemu-devel] [PATCH 0/8] blockdev: (Nearly) free clean-up work List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-block@nongnu.org Cc: Kevin Wolf , qemu-devel@nongnu.org, Max Reitz After a lot has been restructed in the block layer in the past, we can now reap at least one of the fruits: Make bdrv_open() return a BDS! I tried to squeeze patch 8 of this series into my bdrv_close_all() series but noticed that won't work because bdrv_open_inherit() still has one instance of bdrv_close() which is actually pretty reasonable. Therefore, that was impossible there. However, that instance exists only because bdrv_open_inherit() does not always create a new BDS but sometimes takes an existing one and opens a file "into" that BDS, basically. That is ugly and we've tried to get rid of that for a long time now. Then I noticed that nearly all the callers of bdrv_open()/bdrv_open_inherit() no longer need that feature, there was only one show-stopper left: blk_new_open(). That functions creates a BDS using blk_new_with_bs(), which in turn uses bdrv_new_root() instead of a plain bdrv_new(). However, the sole difference between bdrv_new_root() and bdrv_new() is gone as of my "Further BlockBackend work" series, so we can make blk_new_open() reuse the BDS creation capabilities of bdrv_open() as well. And that's it! And with bdv_open_inherit() always creating the BDS, we no longer need to call bdrv_close() there, which allows us to assert that any BDS given to bdrv_close() will have a refcount of 0 (i.e. is about to be deleted). As hinted before, this series depends on v2 of my previous series "blockdev: Further BlockBackend work". Max Reitz (8): qapi: Drop QERR_UNKNOWN_BLOCK_FORMAT_FEATURE block: Drop useless bdrv_new() calls block: Let bdrv_open_inherit() return the snapshot block: Drop BB name from bad option error block: Drop blk_new_with_bs() block: Drop bdrv_new_root() block: Make bdrv_open() return a BDS block: Assert !bs->refcnt in bdrv_close() block.c | 139 ++++++++++++++++++--------------------------- block/block-backend.c | 31 +++------- block/parallels.c | 9 +-- block/qcow.c | 15 ++--- block/qcow2.c | 53 ++++++----------- block/qed.c | 18 ++---- block/sheepdog.c | 16 +++--- block/vdi.c | 7 +-- block/vhdx.c | 8 +-- block/vmdk.c | 31 +++++----- block/vpc.c | 7 +-- block/vvfat.c | 9 ++- blockdev.c | 38 +++++-------- include/block/block.h | 6 +- include/qapi/qmp/qerror.h | 3 - tests/qemu-iotests/036.out | 16 +++--- tests/qemu-iotests/051.out | 8 +-- 17 files changed, 153 insertions(+), 261 deletions(-) -- 2.6.2