From: Kevin Wolf <kwolf@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: benoit.canet@nodalink.com, famz@redhat.com,
qemu-devel@nongnu.org, stefanha@redhat.com, mreitz@redhat.com
Subject: Re: [Qemu-devel] [PATCH v3 03/23] block: Connect BlockBackend to BlockDriverState
Date: Tue, 30 Sep 2014 13:10:33 +0200 [thread overview]
Message-ID: <20140930111033.GG3943@noname.str.redhat.com> (raw)
In-Reply-To: <87egut5qch.fsf@blackfin.pond.sub.org>
Am 30.09.2014 um 12:56 hat Markus Armbruster geschrieben:
> Kevin Wolf <kwolf@redhat.com> writes:
>
> > Am 16.09.2014 um 20:12 hat Markus Armbruster geschrieben:
> >> The pointer from BlockBackend to BlockDriverState is a strong
> >> reference, managed with bdrv_ref() / bdrv_unref(), the back-pointer is
> >> a weak one.
> >>
> >> Convenience function blk_new_with_bs() creates a BlockBackend with its
> >> BlockDriverState. Callers have to unref both. The commit after next
> >> will relieve them of the need to unref the BlockDriverState.
> >>
> >> Complication: due to the silly way drive_del works, we need a way to
> >> hide a BlockBackend, just like bdrv_make_anon(). To emphasize its
> >> "special" status, give the function a suitably off-putting name:
> >> blk_hide_on_behalf_of_do_drive_del(). Unfortunately, hiding turns the
> >> BlockBackend's name into the empty string. Can't avoid that without
> >> breaking the blk->bs->device_name equals blk->name invariant.
> >>
> >> The patch adds a memory leak: drive_del while a device model is
> >> connected leaks the BlockBackend. Avoiding the leak here is rather
> >> hairy, but it'll become straightforward in a few commits, so I mark it
> >> FIXME in the code now, and plug it when it's easy.
> >>
> >> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> >> ---
> >> block.c | 10 ++--
> >> block/block-backend.c | 71 ++++++++++++++++++++++-
> >> blockdev.c | 21 ++++---
> >> hw/block/xen_disk.c | 8 +--
> >> include/block/block_int.h | 2 +
> >> include/sysemu/block-backend.h | 5 ++
> >> qemu-img.c | 125 +++++++++++++++++++----------------------
> >> qemu-io.c | 4 +-
> >> qemu-nbd.c | 4 +-
> >> 9 files changed, 156 insertions(+), 94 deletions(-)
> >>
> >> diff --git a/block.c b/block.c
> >> index 934881f..7ccf443 100644
> >> --- a/block.c
> >> +++ b/block.c
> >> @@ -2032,7 +2032,7 @@ static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
> >> * This will modify the BlockDriverState fields, and swap contents
> >> * between bs_new and bs_old. Both bs_new and bs_old are modified.
> >> *
> >> - * bs_new is required to be anonymous.
> >> + * bs_new must be nameless and not attached to a BlockBackend.
> >> *
> >> * This function does not create any image files.
> >> */
> >> @@ -2051,8 +2051,9 @@ void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
> >> QTAILQ_REMOVE(&graph_bdrv_states, bs_old, node_list);
> >> }
> >>
> >> - /* bs_new must be anonymous and shouldn't have anything fancy enabled */
> >> + /* bs_new must be nameless and shouldn't have anything fancy enabled */
> >> assert(bs_new->device_name[0] == '\0');
> >> + assert(!bs_new->blk);
> >> assert(QLIST_EMPTY(&bs_new->dirty_bitmaps));
> >> assert(bs_new->job == NULL);
> >> assert(bs_new->dev == NULL);
> >> @@ -2068,8 +2069,9 @@ void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
> >> bdrv_move_feature_fields(bs_old, bs_new);
> >> bdrv_move_feature_fields(bs_new, &tmp);
> >>
> >> - /* bs_new shouldn't be in bdrv_states even after the swap! */
> >> + /* bs_new must remain nameless and unattached */
> >> assert(bs_new->device_name[0] == '\0');
> >> + assert(!bs_new->blk);
> >
> > Taking back my R-b: You tricked us, this assertion doesn't hold true.
> > Easy to reproduce by taking a live snapshot. qemu-iotests case 052
> > catches it. Didn't you run it?
>
> I run "make check-qtest check-block" on every commit before I submit.
> No idea what went wrong with this one.
When run for raw, it's only 052 that catches it. For qcow2, I got some
more failures: 039 040 041 051 052 085
I see the problem: Only 039 and 052 are marked as 'quick', i.e. the rest
is already excluded from 'make check-block'. 039 and 052 don't work with
cache=none and 'make check-block' uses -nocache, so those are skipped as
well. I'll send a patch to remove the -nocache option and let it run
with the default options.
Kevin
next prev parent reply other threads:[~2014-09-30 11:10 UTC|newest]
Thread overview: 110+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-16 18:12 [Qemu-devel] [PATCH v3 00/23] Split BlockBackend off BDS with an axe Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 01/23] block: Split bdrv_new_root() off bdrv_new() Markus Armbruster
2014-09-18 14:44 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 02/23] block: New BlockBackend Markus Armbruster
2014-09-19 16:17 ` Kevin Wolf
2014-09-19 17:13 ` Markus Armbruster
2014-09-20 19:04 ` Max Reitz
2014-09-22 6:56 ` Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 03/23] block: Connect BlockBackend to BlockDriverState Markus Armbruster
2014-09-20 19:08 ` Max Reitz
2014-09-22 14:59 ` Kevin Wolf
2014-09-22 16:34 ` Markus Armbruster
2014-09-23 11:45 ` Kevin Wolf
2014-09-23 12:52 ` Markus Armbruster
2014-09-23 13:36 ` Kevin Wolf
2014-09-23 15:29 ` Markus Armbruster
2014-09-25 21:54 ` Benoît Canet
2014-09-30 10:40 ` Kevin Wolf
2014-09-30 10:56 ` Markus Armbruster
2014-09-30 11:10 ` Kevin Wolf [this message]
2014-09-30 12:03 ` Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 04/23] block: Connect BlockBackend and DriveInfo Markus Armbruster
2014-09-20 19:38 ` Max Reitz
2014-09-22 7:33 ` Markus Armbruster
2014-09-22 17:15 ` Kevin Wolf
2014-09-23 10:57 ` Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 05/23] block: Code motion to get rid of stubs/blockdev.c Markus Armbruster
2014-09-20 19:46 ` Max Reitz
2014-09-23 12:15 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 06/23] block: Make BlockBackend own its BlockDriverState Markus Armbruster
2014-09-20 20:10 ` Max Reitz
2014-09-23 13:12 ` Kevin Wolf
2014-09-23 16:24 ` Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 07/23] block: Eliminate bdrv_iterate(), use bdrv_next() Markus Armbruster
2014-09-20 20:29 ` Max Reitz
2014-09-25 11:25 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 08/23] block: Eliminate BlockDriverState member device_name[] Markus Armbruster
2014-09-20 20:49 ` Max Reitz
2014-09-25 11:37 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 09/23] block: Merge BlockBackend and BlockDriverState name spaces Markus Armbruster
2014-09-20 20:52 ` Max Reitz
2014-09-25 12:57 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 10/23] block: Eliminate DriveInfo member bdrv, use blk_by_legacy_dinfo() Markus Armbruster
2014-09-17 11:24 ` Benoît Canet
2014-09-18 7:11 ` Markus Armbruster
2014-09-20 21:09 ` Max Reitz
2014-09-25 13:06 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 11/23] block: Rename BlockDriverAIOCB* to BlockAIOCB* Markus Armbruster
2014-09-20 21:16 ` Max Reitz
2014-09-25 13:15 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 12/23] virtio-blk: Drop redundant VirtIOBlock member conf Markus Armbruster
2014-09-17 11:31 ` Benoît Canet
2014-09-20 21:22 ` Max Reitz
2014-09-22 7:34 ` Markus Armbruster
2014-09-25 13:18 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 13/23] virtio-blk: Rename VirtIOBlkConf variables to conf Markus Armbruster
2014-09-17 11:35 ` Benoît Canet
2014-09-18 7:17 ` Markus Armbruster
2014-09-20 21:25 ` Max Reitz
2014-09-26 13:22 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 14/23] hw: Convert from BlockDriverState to BlockBackend, mostly Markus Armbruster
2014-09-20 22:01 ` Max Reitz
2014-09-22 7:42 ` Markus Armbruster
2014-09-26 14:26 ` Kevin Wolf
2014-09-26 15:00 ` Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 15/23] ide: Complete conversion from BlockDriverState to BlockBackend Markus Armbruster
2014-09-20 22:05 ` Max Reitz
2014-09-29 12:07 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 16/23] pc87312: Drop unused members of PC87312State Markus Armbruster
2014-09-17 11:44 ` Benoît Canet
2014-09-20 22:07 ` Max Reitz
2014-09-29 12:08 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 17/23] blockdev: Drop superfluous DriveInfo member id Markus Armbruster
2014-09-17 11:43 ` Benoît Canet
2014-09-22 12:58 ` Max Reitz
2014-09-29 12:13 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 18/23] blockdev: Fix blockdev-add not to create IDE drive (0, 0) Markus Armbruster
2014-09-17 12:09 ` Benoît Canet
2014-09-22 13:05 ` Max Reitz
2014-09-29 12:24 ` Kevin Wolf
2014-09-29 13:05 ` Markus Armbruster
2014-09-29 15:34 ` Kevin Wolf
2014-09-30 6:21 ` Markus Armbruster
2014-09-29 13:12 ` Kevin Wolf
2014-09-29 14:04 ` Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 19/23] blockdev: Drop DriveInfo member enable_auto_del Markus Armbruster
2014-09-17 12:12 ` Benoît Canet
2014-09-22 13:16 ` Max Reitz
2014-09-22 15:06 ` Markus Armbruster
2014-09-22 15:12 ` Max Reitz
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 20/23] block/qapi: Convert qmp_query_block() to BlockBackend Markus Armbruster
2014-09-22 12:05 ` Benoît Canet
2014-09-22 13:22 ` Max Reitz
2014-09-29 13:26 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 21/23] blockdev: Convert qmp_eject(), qmp_change_blockdev() " Markus Armbruster
2014-09-22 12:08 ` Benoît Canet
2014-09-22 13:26 ` Max Reitz
2014-09-22 15:07 ` Markus Armbruster
2014-09-30 9:55 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 22/23] block: Lift device model API into BlockBackend Markus Armbruster
2014-09-22 12:13 ` Benoît Canet
2014-09-22 12:54 ` Markus Armbruster
2014-09-22 13:58 ` Max Reitz
2014-09-30 10:49 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 23/23] block: Make device model's references to BlockBackend strong Markus Armbruster
2014-09-22 12:06 ` Benoît Canet
2014-09-22 14:06 ` Max Reitz
2014-09-22 15:08 ` Markus Armbruster
2014-09-30 11:01 ` Kevin Wolf
2014-09-30 12:04 ` Markus Armbruster
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=20140930111033.GG3943@noname.str.redhat.com \
--to=kwolf@redhat.com \
--cc=armbru@redhat.com \
--cc=benoit.canet@nodalink.com \
--cc=famz@redhat.com \
--cc=mreitz@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.