From: Fam Zheng <famz@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: kwolf@redhat.com, rjones@redhat.com, obarenbo@redhat.com,
roliveri@redhat.com, hbrock@redhat.com, armbru@redhat.com,
qemu-devel@nongnu.org, pmyers@redhat.com, imain@redhat.com,
stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH 1/7] block: Convert BlockDriverState.in_use to refcount
Date: Mon, 8 Jul 2013 16:37:55 +0800 [thread overview]
Message-ID: <20130708083755.GA24551@T430s.redhat.com> (raw)
In-Reply-To: <51D2A9B8.90508@redhat.com>
On Tue, 07/02 12:21, Paolo Bonzini wrote:
> Il 02/07/2013 07:59, Fam Zheng ha scritto:
> > Use numeric value to replace in_use flag in BDS, this will make
> > lifecycle management with ref count possible. This patch only replaces
> > existing uses of bdrv_set_in_use, so no logic change here.
>
> This still does not entirely explain the rules for who sets in_use (or
> gets a reference) and who checks in_use.
>
> Why should offline commit worry about the disk being shared, for
> example? The reason "of course" is that a background job might modify
> bs->backing_hd while commit is running (or might expect bs->backing_hd
> to not change). However, this is in no way related to a reference count.
>
> So I think your series is doing two things right (setting the in_use
> flag for BDSes in the ->file and ->backing_hd chains; turning the in_use
> flag into a counter) and one wrong (tying bdrv_in_use checks to the
> lifecycle). I wonder thus if we need two counters: the "in use" counter
> and the reference count for the lifecycle.
But the two are not orthognal, it's somehow like rlock and wlock. What
I try is to simplify the (usual) logic that a BDS user calls
bdrv_get_ref() for lifecycle as well as bdrv_set_in_use() to secure the
state. With refcount as a sign for in_use, they just need inference if
its ref count is more than one: it's shared, don't modify it, and expect
it to change, like rwlock implies.
I think commit should worry about the disk being shared: We eventually
need the target of drive-backup to be exported through NBD, which means
it has a device id, and its backing_hd is also attached to guest device,
so we can't commit it. That said, I think a BDS being shared is an
evidence for not to make any change. Do we have any exception on this
rule?
For NBD there is close notifier, so I want to drop the refcount (PATCH
3/7).
> > -void bdrv_set_in_use(BlockDriverState *bs, int in_use)
> > +void bdrv_put_ref(BlockDriverState *bs)
> > +{
> > + assert(bs->refcount > 0);
> > + bs->refcount--;
> > +}
> > +
> > +void bdrv_get_ref(BlockDriverState *bs)
> > {
> > - assert(bs->in_use != in_use);
> > - bs->in_use = in_use;
> > + bs->refcount++;
> > }
>
> The convention that we use in QEMU is bdrv_ref/bdrv_unref.
I'm following drive_get_ref() here.
Thanks.
Fam
next prev parent reply other threads:[~2013-07-08 8:38 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-02 5:59 [Qemu-devel] [PATCH 0/7] Point-in-time snapshot exporting over NBD Fam Zheng
2013-07-02 5:59 ` [Qemu-devel] [PATCH 1/7] block: Convert BlockDriverState.in_use to refcount Fam Zheng
2013-07-02 10:21 ` Paolo Bonzini
2013-07-08 8:37 ` Fam Zheng [this message]
2013-07-02 19:41 ` Eric Blake
2013-07-03 0:59 ` Fam Zheng
2013-07-02 5:59 ` [Qemu-devel] [PATCH 2/7] block: use refcount to manage BlockDriverState lifecycle Fam Zheng
2013-07-02 5:59 ` [Qemu-devel] [PATCH 3/7] nbd: use BDS refcount Fam Zheng
2013-07-02 10:16 ` Paolo Bonzini
2013-07-03 1:10 ` Fam Zheng
2013-07-03 5:58 ` Paolo Bonzini
2013-07-03 6:30 ` Fam Zheng
2013-07-03 7:28 ` Paolo Bonzini
2013-07-02 5:59 ` [Qemu-devel] [PATCH 4/7] block: simplify bdrv_drop_intermediate Fam Zheng
2013-07-04 14:02 ` Stefan Hajnoczi
2013-07-05 1:00 ` Fam Zheng
2013-07-02 5:59 ` [Qemu-devel] [PATCH 5/7] block: rename bdrv_in_use to bdrv_is_shared Fam Zheng
2013-07-02 5:59 ` [Qemu-devel] [PATCH 6/7] block: add target-id option to drive-backup QMP command Fam Zheng
2013-07-02 19:59 ` Eric Blake
2013-07-02 5:59 ` [Qemu-devel] [PATCH 7/7] block: assign backing relationship in drive-backup Fam Zheng
2013-07-04 14:32 ` Stefan Hajnoczi
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=20130708083755.GA24551@T430s.redhat.com \
--to=famz@redhat.com \
--cc=armbru@redhat.com \
--cc=hbrock@redhat.com \
--cc=imain@redhat.com \
--cc=kwolf@redhat.com \
--cc=obarenbo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=pmyers@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rjones@redhat.com \
--cc=roliveri@redhat.com \
--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).