[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 00/22] block: Rework bdrv_close_all()
From: |
Max Reitz |
Subject: |
[Qemu-devel] [PATCH v2 00/22] block: Rework bdrv_close_all() |
Date: |
Mon, 9 Feb 2015 13:38:22 -0500 |
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
- [Qemu-devel] [PATCH v2 00/22] block: Rework bdrv_close_all(),
Max Reitz <=
- [Qemu-devel] [PATCH v2 01/22] iotests: Move _filter_nbd into common.filter, Max Reitz, 2015/02/09
- [Qemu-devel] [PATCH v2 05/22] block: Move BDS close notifiers into BB, Max Reitz, 2015/02/09
- [Qemu-devel] [PATCH v2 08/22] block: Use blk_remove_bs() in blk_delete(), Max Reitz, 2015/02/09
- [Qemu-devel] [PATCH v2 03/22] iotests: Add test for eject under NBD server, Max Reitz, 2015/02/09
- [Qemu-devel] [PATCH v2 02/22] iotests: Do not redirect qemu's stderr, Max Reitz, 2015/02/09
- [Qemu-devel] [PATCH v2 09/22] blockdev: Use blk_remove_bs() in do_drive_del(), Max Reitz, 2015/02/09
- [Qemu-devel] [PATCH v2 04/22] quorum: Fix close path, Max Reitz, 2015/02/09
- [Qemu-devel] [PATCH v2 10/22] block: Make bdrv_close() static, Max Reitz, 2015/02/09
- [Qemu-devel] [PATCH v2 07/22] block: Add bdrv_close_all() handlers, Max Reitz, 2015/02/09