From: Kevin Wolf <kwolf@redhat.com>
To: Max Reitz <mreitz@redhat.com>
Cc: berto@igalia.com, qemu-block@nongnu.org, jcody@redhat.com,
qemu-devel@nongnu.org, armbru@redhat.com, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH 09/16] block: Split bdrv_move_feature_fields()
Date: Tue, 29 Sep 2015 15:37:04 +0200 [thread overview]
Message-ID: <20150929133704.GJ3930@noname.str.redhat.com> (raw)
In-Reply-To: <5602D520.3050303@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 3110 bytes --]
Am 23.09.2015 um 18:36 hat Max Reitz geschrieben:
> On 17.09.2015 15:48, Kevin Wolf wrote:
> > After bdrv_swap(), some fields must be moved back to their original BDS
> > to compensate for the effects that a swap of the contents of the objects
> > has while keeping the old addresses. Other fields must be moved back
> > because they should logically be moved and must stay on top
> >
> > When replacing bdrv_swap() with operations changing the pointers in the
> > parents, we only need the latter and must avoid swapping the former.
> > Split the function accordingly.
> >
> > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > ---
> > block.c | 12 ++++++++++++
> > 1 file changed, 12 insertions(+)
> >
> > diff --git a/block.c b/block.c
> > index 743f82e..7930f3c 100644
> > --- a/block.c
> > +++ b/block.c
> > @@ -1984,6 +1984,8 @@ static void bdrv_rebind(BlockDriverState *bs)
> > }
> > }
> >
> > +/* Fields that need to stay with the top-level BDS, no matter whether the
> > + * address of the top-level BDS stays the same or not. */
> > static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
> > BlockDriverState *bs_src)
> > {
> > @@ -2019,7 +2021,13 @@ static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
> >
> > /* dirty bitmap */
> > bs_dest->dirty_bitmaps = bs_src->dirty_bitmaps;
> > +}
> >
> > +/* Fields that only need to be swapped if the contents of BDSes is swapped
> > + * rather than pointers being changed in the parents. */
> > +static void bdrv_move_reference_fields(BlockDriverState *bs_dest,
> > + BlockDriverState *bs_src)
> > +{
> > /* reference count */
> > bs_dest->refcnt = bs_src->refcnt;
> >
>
> I'm not sure whether the op blockers should be moved in this function...
> I think they should be moved in bdrv_move_feasture_fields(), because
> they generally depend on the position within the node graph and not on
> the BDS itself, don't they?
Op blockers are a mess. I believe we have both kinds. In any case, we
should be relatively safe here because the operation involving something
like bdrv_append() or bdrv_replace_in_backing_chain() would have been
blocked in the first place if there were an op blocker that needs to be
moved.
I seem to remember that there were two reasons for not moving op
blockers: The first one is that the next action the block jobs want to
do is to unblock (because the job has completed) and it's nicer to do
this on the same BDS as they blocked initially. The other one is that
bs->backing_blocker is already managed by bdrv_set_backing_hd() and
swapping in addition broke things.
Oh, and the third one is that swapping is plain wrong. We're not really
performing a symmetrical swap any more. If BDS A is replaced by BDS B
(or B is appended to a chain that had A as it's root before), all
parents of _both_ A and B point to B afterwards. So swapping would move
some op blockers to now completely unrelated BDSes.
Kevin
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2015-09-29 13:37 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-17 13:48 [Qemu-devel] [PATCH 00/16] block: Get rid of bdrv_swap() Kevin Wolf
2015-09-17 13:48 ` [Qemu-devel] [PATCH 01/16] block: Introduce BDS.file_child Kevin Wolf
2015-09-22 17:14 ` Max Reitz
2015-09-22 17:17 ` Max Reitz
2015-09-23 14:26 ` Alberto Garcia
2015-09-17 13:48 ` [Qemu-devel] [PATCH 02/16] vmdk: Use BdrvChild instead of BDS for references to extents Kevin Wolf
2015-09-22 17:45 ` Max Reitz
2015-09-23 13:23 ` Alberto Garcia
2015-09-17 13:48 ` [Qemu-devel] [PATCH 03/16] blkverify: Convert s->test_file to BdrvChild Kevin Wolf
2015-09-22 17:51 ` Max Reitz
2015-09-23 13:01 ` Alberto Garcia
2015-09-23 13:58 ` Kevin Wolf
2015-09-23 14:05 ` Alberto Garcia
2015-09-23 14:11 ` Alberto Garcia
2015-09-17 13:48 ` [Qemu-devel] [PATCH 04/16] quorum: Convert " Kevin Wolf
2015-09-22 17:57 ` Max Reitz
2015-09-23 12:48 ` Alberto Garcia
2015-09-17 13:48 ` [Qemu-devel] [PATCH 05/16] block: Convert bs->file " Kevin Wolf
2015-09-22 18:36 ` Max Reitz
2015-09-23 13:13 ` Kevin Wolf
2015-09-23 14:54 ` Alberto Garcia
2015-09-25 14:09 ` Alberto Garcia
2015-09-17 13:48 ` [Qemu-devel] [PATCH 06/16] block: Remove bdrv_open_image() Kevin Wolf
2015-09-22 18:38 ` Max Reitz
2015-09-23 13:10 ` Alberto Garcia
2015-09-17 13:48 ` [Qemu-devel] [PATCH 07/16] block: Convert bs->backing_hd to BdrvChild Kevin Wolf
2015-09-22 19:21 ` Max Reitz
2015-09-17 13:48 ` [Qemu-devel] [PATCH 08/16] block: Manage backing file references in bdrv_set_backing_hd() Kevin Wolf
2015-09-23 15:22 ` Max Reitz
2015-09-28 12:29 ` Alberto Garcia
2015-09-17 13:48 ` [Qemu-devel] [PATCH 09/16] block: Split bdrv_move_feature_fields() Kevin Wolf
2015-09-23 16:36 ` Max Reitz
2015-09-29 13:37 ` Kevin Wolf [this message]
2015-09-30 14:51 ` Max Reitz
2015-09-17 13:48 ` [Qemu-devel] [PATCH 10/16] block/io: Make bdrv_requests_pending() public Kevin Wolf
2015-09-23 15:40 ` Max Reitz
2015-09-29 12:29 ` Kevin Wolf
2015-09-28 12:32 ` Alberto Garcia
2015-09-17 13:48 ` [Qemu-devel] [PATCH 11/16] block-backend: Add blk_set_bs() Kevin Wolf
2015-09-23 15:46 ` Max Reitz
2015-09-23 15:51 ` Kevin Wolf
2015-09-17 13:48 ` [Qemu-devel] [PATCH 12/16] block: Introduce parents list Kevin Wolf
2015-09-23 16:39 ` Max Reitz
2015-09-28 13:09 ` Alberto Garcia
2015-09-29 12:21 ` Kevin Wolf
2015-09-29 14:00 ` Alberto Garcia
2015-09-17 13:48 ` [Qemu-devel] [PATCH 13/16] block: Implement bdrv_append() without bdrv_swap() Kevin Wolf
2015-09-18 11:45 ` Alberto Garcia
2015-09-18 12:24 ` Kevin Wolf
2015-09-18 13:31 ` Alberto Garcia
2015-09-18 14:23 ` Kevin Wolf
2015-09-23 16:36 ` Max Reitz
2015-09-29 13:51 ` Kevin Wolf
2015-09-30 14:45 ` Max Reitz
2015-09-30 15:33 ` Kevin Wolf
2015-09-17 13:48 ` [Qemu-devel] [PATCH 14/16] blockjob: Store device name at job creation Kevin Wolf
2015-09-23 16:46 ` Max Reitz
2015-09-17 13:48 ` [Qemu-devel] [PATCH 15/16] block: Add and use bdrv_replace_in_backing_chain() Kevin Wolf
2015-09-23 17:08 ` Max Reitz
2015-09-29 15:22 ` Kevin Wolf
2015-09-30 14:50 ` Max Reitz
2015-09-30 14:50 ` Max Reitz
2015-09-17 13:48 ` [Qemu-devel] [PATCH 16/16] block: Remove bdrv_swap() Kevin Wolf
2015-09-23 17:09 ` Max Reitz
2015-09-28 13:24 ` Alberto Garcia
2015-09-18 11:03 ` [Qemu-devel] [PATCH 00/16] block: Get rid of bdrv_swap() Alberto Garcia
2015-09-22 10:07 ` Kevin Wolf
2015-09-24 18:32 ` Alberto Garcia
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=20150929133704.GJ3930@noname.str.redhat.com \
--to=kwolf@redhat.com \
--cc=armbru@redhat.com \
--cc=berto@igalia.com \
--cc=jcody@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--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).