From: Max Reitz <mreitz@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Max Reitz <mreitz@redhat.com>
Subject: [Qemu-devel] [PATCH v2 00/22] block: Rework bdrv_close_all()
Date: Mon, 9 Feb 2015 13:38:22 -0500 [thread overview]
Message-ID: <1423507124-29809-1-git-send-email-mreitz@redhat.com> (raw)
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
next reply other threads:[~2015-02-09 18:38 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-09 18:38 Max Reitz [this message]
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 01/22] iotests: Move _filter_nbd into common.filter Max Reitz
2015-02-16 19:31 ` Eric Blake
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 02/22] iotests: Do not redirect qemu's stderr Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 03/22] iotests: Add test for eject under NBD server Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 04/22] quorum: Fix close path Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 05/22] block: Move BDS close notifiers into BB Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 06/22] block: Add bdrv_close_all() notifiers Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 07/22] block: Add bdrv_close_all() handlers Max Reitz
2015-02-13 23:02 ` Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 08/22] block: Use blk_remove_bs() in blk_delete() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 09/22] blockdev: Use blk_remove_bs() in do_drive_del() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 10/22] block: Make bdrv_close() static Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 11/22] block: Add blk_name_taken() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 12/22] block: Add blk_next_inserted() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 13/22] block: Add blk_commit_all() and blk_invalidate_cache_all() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 14/22] block: Use BlockBackend more Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 15/22] blockdev: Add list of monitor-owned BlockBackends Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 16/22] blockdev: Remove blk_hide_on_behalf_of_do_drive_del() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 17/22] block: Make bdrv_drain_one() public Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 18/22] block: Move some bdrv_*_all() functions to BB Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 19/22] block: Remove bdrv_states Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 20/22] blockdev: Keep track of monitor-owned BDS Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 21/22] block: Strip down bdrv_close_all() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 22/22] iotests: Add test for multiple BB on BDS tree Max Reitz
2015-02-10 8:23 ` [Qemu-devel] [PATCH v2 00/22] block: Rework bdrv_close_all() Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1423507124-29809-1-git-send-email-mreitz@redhat.com \
--to=mreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).