[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] block: Make op blocker recursive
From: |
Benoît Canet |
Subject: |
Re: [Qemu-devel] [PATCH] block: Make op blocker recursive |
Date: |
Sat, 21 Jun 2014 12:45:52 +0200 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
The Saturday 21 Jun 2014 à 16:53:58 (+0800), Fam Zheng wrote :
> On Fri, 06/20 09:30, Eric Blake wrote:
> > On 06/19/2014 11:01 PM, Fam Zheng wrote:
> > > On Thu, 06/19 22:20, Benoît Canet wrote:
> > >> The Thursday 19 Jun 2014 à 14:13:20 (-0600), Eric Blake wrote :
> > >>> On 06/19/2014 02:01 PM, Benoît Canet wrote:
> > >>>> As the code will start to operate on arbitratry nodes we need the op
> > >>>> blocker
> > >>>
> > >>> s/arbitratry/arbitrary/
> > >>>
> > >>>> to recursively block or unblock whole BDS subtrees.
> > >
> > > I don't get the reason, can you elaborate?
> >
> > Consider what happens if I have:
> >
> > base <- snap1 <- active
> >
> > then I start a fleecing NBD server on the state as it was at snap1:
> >
> > base <- snap1 <- active
> > \- fleecing
> >
> > then I do a blockpull into active:
> >
> > base <- snap1 <- fleecing
> > active
> >
> > at this point, base and snap1 are no longer tied to active, but they
> > STILL must be protected from operations that would modify their contents
> > in a way that would break the fleecing operation. The solution we are
> > looking at is making BDS blockers recursive to every element of the
> > chain, not just the top-level device.
>
> This would already have been protected by backing blocker of fleecing target.
>
> >
> > Another example: consider:
> >
> > base <- snap1 <- active
> >
> > then someone uses Jeff's proposed new change-backing-file QMP command to
> > rewrite the snap1 metadata to point to base via a relative name instead
> > of an absolute name. It shouldn't matter whether active is blocked, but
> > only whether snap1 is blocked. But to know if snap1 is blocked, we have
> > to propagate the blockers of active down recursively to its backing files.
>
> Why do we need to block changging of metadata? I think this operation is safe
> in most cases.
>
> Correct me if I'm missing anything, but even if snap1 _is_ blocked, it would
> be
> because snap1 is serving as backing of active. In this case, the actual
> blocker
> should be active->backing_blocker.
>
> >
> > >> What would be a cleaner solution ?
> > >
> > > What is the question to solve?
> >
> > I think Jeff's idea is on target - rather than blocking by operation, we
> > should instead be blocking on access patterns (various operations
> > trigger several access patterns):
> > https://lists.gnu.org/archive/html/qemu-devel/2014-06/msg04752.html
> >
> > Jeff's initial list included:
> >
> > > So if I think of operations that are done on block devices from a
> > > block job, and chuck them into categories, I think we have:
> > >
> > > 1) Read of guest-visible data
> > > 2) Write of guest-visible data
> > > 3) Read of host-visible data (e.g. image file metadata)
> > > 4) Write of host-visible data (e.g. image file metadata, such as
> > > the backing-file)
> > > 5) Block chain manipulations (e.g. movement of a BDS, change to r/w
> > > instead of r/o, etc..)
> > > 6) I/O attribute changes (e.g. throttling, etc..)
>
> Most operations looks safe to me, given the way how IOThreads and coroutine
> work now. It's only the chain manpulations in long running block jobs that are
> exclusive, and by nature it should be checked per chain. Can we set some op
> blockers on the bottom BDS and check it each time, to prevent user from
> starting a second chain manipulator?
I don't know if bottom BDS locking is any good because some driver like quorum
have multiple childs.
Locking everytime the root (top) of the tree seems a feasible solution indeed.
Best regards
Benoît
>
> Fam
>
- [Qemu-devel] [PATCH] Recursive blocker, Benoît Canet, 2014/06/19
- [Qemu-devel] [PATCH] block: Make op blocker recursive, Benoît Canet, 2014/06/19
- Re: [Qemu-devel] [PATCH] block: Make op blocker recursive, Eric Blake, 2014/06/19
- Re: [Qemu-devel] [PATCH] block: Make op blocker recursive, Fam Zheng, 2014/06/20
- Re: [Qemu-devel] [PATCH] block: Make op blocker recursive, Eric Blake, 2014/06/20
- Re: [Qemu-devel] [PATCH] block: Make op blocker recursive, Fam Zheng, 2014/06/21
- Re: [Qemu-devel] [PATCH] block: Make op blocker recursive,
Benoît Canet <=
- Re: [Qemu-devel] [PATCH] block: Make op blocker recursive, Fam Zheng, 2014/06/21
- Re: [Qemu-devel] [PATCH] block: Make op blocker recursive, Benoît Canet, 2014/06/21
- Re: [Qemu-devel] [PATCH] block: Make op blocker recursive, Benoît Canet, 2014/06/21
- Re: [Qemu-devel] [PATCH] block: Make op blocker recursive, Fam Zheng, 2014/06/23
- Re: [Qemu-devel] [PATCH] block: Make op blocker recursive, Benoît Canet, 2014/06/23
- Re: [Qemu-devel] [PATCH] block: Make op blocker recursive, Fam Zheng, 2014/06/23