From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56525) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YKtET-000446-SL for qemu-devel@nongnu.org; Mon, 09 Feb 2015 13:38:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YKtEO-0005Mu-KL for qemu-devel@nongnu.org; Mon, 09 Feb 2015 13:38:53 -0500 Received: from mx1.redhat.com ([209.132.183.28]:51091) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YKtEO-0005MJ-Cr for qemu-devel@nongnu.org; Mon, 09 Feb 2015 13:38:48 -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 t19Ick39022251 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Mon, 9 Feb 2015 13:38:47 -0500 From: Max Reitz Date: Mon, 9 Feb 2015 13:38:22 -0500 Message-Id: <1423507124-29809-1-git-send-email-mreitz@redhat.com> Subject: [Qemu-devel] [PATCH v2 00/22] 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 , Paolo Bonzini , 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 v2 of my series "blockdev: BlockBackend and media" (or any later version), and on my series "nbd: Drop BDS backpointer" (on the patch "iotests: Add 'wait' functionality to _cleanup_qemu"). v2: - Dropped old patches 1 (squashed into "blockdev: BlockBackend and media") and 20 (put into "nbd: Drop BDS backpointer") - Patch 1: Added (required for patch 3) - Patch 2: Added (required for patch 3); if someone has a better solution, I'd be very grateful - Patch 3: Added a test which ensures that if the BDS an NBD server is attached to through a BB is ejected, that NBD server is stopped - Patch 5: Replaces the old patch 5 (which removed the BDS close notifiers completely); as pointed out by Paolo, we do need the notifiers as eject notifiers for NBD, so this patch replaces the per-BDS close notifiers by an eject notifier for the BB which is called whenever blk_remove_bs() is called and removes a BDS tree from the BB - Patch 7: Fixed up to fit onto patch 5 - Patch 11: s/namespaces/namespace/ [Eric] - Patch 14: Rebase conflict due to the new bdrv_add_key() function git-backport-diff against v1: Key: [----] : patches are identical [####] : number of functional differences between upstream/downstream patch [down] : patch is downstream-only The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively 001/22:[down] 'iotests: Move _filter_nbd into common.filter' 002/22:[down] 'iotests: Do not redirect qemu's stderr' 003/22:[down] 'iotests: Add test for eject under NBD server' 004/22:[----] [-C] 'quorum: Fix close path' 005/22:[down] 'block: Move BDS close notifiers into BB' 006/22:[----] [--] 'block: Add bdrv_close_all() notifiers' 007/22:[0075] [FC] 'block: Add bdrv_close_all() handlers' 008/22:[----] [-C] 'block: Use blk_remove_bs() in blk_delete()' 009/22:[----] [--] 'blockdev: Use blk_remove_bs() in do_drive_del()' 010/22:[----] [--] 'block: Make bdrv_close() static' 011/22:[0002] [FC] 'block: Add blk_name_taken()' 012/22:[----] [--] 'block: Add blk_next_inserted()' 013/22:[----] [--] 'block: Add blk_commit_all() and blk_invalidate_cache_all()' 014/22:[0009] [FC] 'block: Use BlockBackend more' 015/22:[----] [--] 'blockdev: Add list of monitor-owned BlockBackends' 016/22:[----] [--] 'blockdev: Remove blk_hide_on_behalf_of_do_drive_del()' 017/22:[----] [--] 'block: Make bdrv_drain_one() public' 018/22:[----] [-C] 'block: Move some bdrv_*_all() functions to BB' 019/22:[----] [--] 'block: Remove bdrv_states' 020/22:[----] [--] 'blockdev: Keep track of monitor-owned BDS' 021/22:[----] [--] 'block: Strip down bdrv_close_all()' 022/22:[----] [--] 'iotests: Add test for multiple BB on BDS tree' Max Reitz (22): iotests: Move _filter_nbd into common.filter iotests: Do not redirect qemu's stderr iotests: Add test for eject under NBD server quorum: Fix close path block: Move BDS close notifiers into BB block: Add bdrv_close_all() notifiers block: Add bdrv_close_all() handlers 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 test for multiple BB on BDS tree block.c | 168 ++++------------------ block/block-backend.c | 301 +++++++++++++++++++++++++++++++-------- block/qapi.c | 13 +- block/quorum.c | 3 +- block/snapshot.c | 3 +- blockdev-nbd.c | 36 +---- blockdev.c | 121 +++++++++++++--- cpus.c | 7 +- device-hotplug.c | 2 +- hw/block/xen_disk.c | 16 ++- hw/ide/piix.c | 1 - include/block/block.h | 9 +- include/block/block_int.h | 8 +- include/sysemu/block-backend.h | 24 ++-- include/sysemu/blockdev.h | 3 + migration/block.c | 10 +- migration/migration.c | 4 +- monitor.c | 13 +- nbd.c | 59 +++++++- qemu-char.c | 3 +- qemu-img.c | 39 ++--- qemu-io.c | 8 +- qemu-nbd.c | 6 +- qmp.c | 9 +- savevm.c | 66 +++++---- stubs/Makefile.objs | 2 +- stubs/bdrv-commit-all.c | 7 - stubs/blk-commit-all.c | 7 + tests/qemu-iotests/083 | 13 +- tests/qemu-iotests/083.out | 10 -- tests/qemu-iotests/091 | 3 +- tests/qemu-iotests/096 | 89 ++++++++++++ tests/qemu-iotests/096.out | 16 +++ tests/qemu-iotests/117 | 86 +++++++++++ tests/qemu-iotests/117.out | 14 ++ tests/qemu-iotests/common.filter | 12 ++ tests/qemu-iotests/common.qemu | 1 - tests/qemu-iotests/group | 2 + xen-mapcache.c | 3 +- 39 files changed, 807 insertions(+), 390 deletions(-) delete mode 100644 stubs/bdrv-commit-all.c create mode 100644 stubs/blk-commit-all.c create mode 100755 tests/qemu-iotests/096 create mode 100644 tests/qemu-iotests/096.out create mode 100755 tests/qemu-iotests/117 create mode 100644 tests/qemu-iotests/117.out -- 2.1.0