qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Meeting notes on -blockdev, dynamic backend reconfigura


From: Fam Zheng
Subject: Re: [Qemu-devel] Meeting notes on -blockdev, dynamic backend reconfiguration
Date: Wed, 7 Dec 2016 10:55:34 +0800
User-agent: Mutt/1.7.1 (2016-10-04)

On Mon, 12/05 13:03, Markus Armbruster wrote:
> == Basic dynamic reconfiguration operation ==
> 
> The basic operation is "replace child".
> 
> Beware of race conditions.  Consider:
> 
>           BB
>           |
>     mirror-filter
>           |
>          BDS
> 
> Add a throttle filter under BB while the mirror job is running.  First
> step, create the filter:
> 
>           BB    throttle-filter
>           |     /
>     mirror-filter
>           |
>          BDS
> 
> Second step, replace child of BB by the new filter:
> 
>           BB
>           |
>    throttle-filter
>           |
>     mirror-filter
>           |
>          BDS
> 
> But: if mirror-filter goes away between the two steps, the replace
> brings it right back!
> 
> To guard against such races, we need to specify both ends of the edge
> being replaced, i.e. parent, child name, actual child.  Then the replace
> step fails if the mirror-filter has gone away.  We can either fail the
> whole operation, or start over.
> 
> Alternatively, transactions, but that feels much more complex.
> 

Isn't it easy to make creating throttle-filter and replacing child happen in the
same critical section of BQL, without any coroutine yield?  If so I think there
is no race to worry about, mirror-filter should go away only after a QMP 
command.

Fam



reply via email to

[Prev in Thread] Current Thread [Next in Thread]