From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47260) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YFpKH-0006YL-G4 for qemu-devel@nongnu.org; Mon, 26 Jan 2015 14:27:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YFpKD-0001hQ-0K for qemu-devel@nongnu.org; Mon, 26 Jan 2015 14:27:57 -0500 Received: from mx1.redhat.com ([209.132.183.28]:53198) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YFpKC-0001gw-Os for qemu-devel@nongnu.org; Mon, 26 Jan 2015 14:27:52 -0500 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t0QJRooq022431 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Mon, 26 Jan 2015 14:27:51 -0500 From: Max Reitz Date: Mon, 26 Jan 2015 14:27:27 -0500 Message-Id: <1422300468-16216-1-git-send-email-mreitz@redhat.com> Subject: [Qemu-devel] [PATCH 00/20] block: Rework bdrv_close_all() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Markus Armbruster , Stefan Hajnoczi , Max Reitz Currently, bdrv_close_all() force-closes all BDSs with a BlockBackend, which can lead to data corruption (see the iotest added in the final patch of this series) and is most certainly very ugly. This series reworks bdrv_close_all() to notify all owners of a BlockBackend that they should release their reference (and additionally the monitor releases all its references to BB-less BDSs). This way, force-closing becomes unnecessary. Also, blk_hide_on_behalf_of_do_drive_del() is removed. Yay! This series depends on my series "blockdev: BlockBackend and media" (or any later version). Max Reitz (21): block: Guard remaining unsafe blk_bs() callers quorum: Fix close path block: Add bdrv_close_all() notifiers block: Add bdrv_close_all() handlers block: Remove per-BDS close notifiers block: Use blk_remove_bs() in blk_delete() blockdev: Use blk_remove_bs() in do_drive_del() block: Make bdrv_close() static block: Add blk_name_taken() block: Add blk_next_inserted() block: Add blk_commit_all() and blk_invalidate_cache_all() block: Use BlockBackend more blockdev: Add list of monitor-owned BlockBackends blockdev: Remove blk_hide_on_behalf_of_do_drive_del() block: Make bdrv_drain_one() public block: Move some bdrv_*_all() functions to BB block: Remove bdrv_states blockdev: Keep track of monitor-owned BDS block: Strip down bdrv_close_all() iotests: Add "wait" functionality to _cleanup_qemu iotests: Add test for multiple BB on BDS tree block.c | 166 ++++------------------- block/block-backend.c | 297 ++++++++++++++++++++++++++++++++--------- block/qapi.c | 13 +- block/quorum.c | 3 +- block/snapshot.c | 3 +- blockdev-nbd.c | 36 +---- blockdev.c | 139 +++++++++++++++---- cpus.c | 7 +- device-hotplug.c | 2 +- hw/block/xen_disk.c | 20 ++- hw/ide/piix.c | 1 - include/block/block.h | 9 +- include/block/block_int.h | 8 +- include/sysemu/block-backend.h | 23 ++-- include/sysemu/blockdev.h | 3 + migration/block.c | 10 +- migration/migration.c | 4 +- monitor.c | 13 +- nbd.c | 37 ++++- qemu-char.c | 3 +- qemu-img.c | 39 +++--- qemu-io.c | 8 +- qemu-nbd.c | 6 +- qmp.c | 14 +- savevm.c | 66 +++++---- stubs/Makefile.objs | 2 +- stubs/bdrv-commit-all.c | 7 - stubs/blk-commit-all.c | 7 + tests/qemu-iotests/117 | 86 ++++++++++++ tests/qemu-iotests/117.out | 14 ++ tests/qemu-iotests/common.qemu | 12 +- tests/qemu-iotests/group | 1 + xen-mapcache.c | 3 +- 33 files changed, 681 insertions(+), 381 deletions(-) delete mode 100644 stubs/bdrv-commit-all.c create mode 100644 stubs/blk-commit-all.c create mode 100755 tests/qemu-iotests/117 create mode 100644 tests/qemu-iotests/117.out -- 2.1.0