[libvirt] [PATCH v3] qemu: avoid rare race when undefining domain

Martin Kletzander mkletzan at redhat.com
Fri Dec 12 10:35:23 UTC 2014


On Fri, Dec 12, 2014 at 11:22:40AM +0100, Michal Privoznik wrote:
>On 11.12.2014 11:48, Martin Kletzander wrote:
>> When one domain is being undefined and at the same time started, for
>> example, there is a possibility of a rare problem occuring.
>>
>>   - Thread 1 does virDomainUndefine(), has the lock, checks that the
>>     domain is active and because it's not, calls
>>     virDomainObjListRemove().
>>
>>   - Thread 2 does virDomainCreate() and tries to lock the domain.
>>
>>   - Thread 1 needs to lock domain list in order to remove the domain from
>>     it, but must unlock domain first (proper order is to lock domain list
>>     first and the domain itself second).
>>
>>   - Thread 2 grabs the lock, starts the domain and releases the lock.
>>
>>   - Thread 1 grabs the lock and removes the domain from list.
>>
>> With this patch:
>>
>>   - The undefining domain gets marked as "to undefine" before it is
>>      unlocked.
>>
>>   - If domain is found in any of the search APIs, it's returned only if
>>     it is not marked as "to undefine".  The check is done while the
>>     domain is locked.
>>
>> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1150505
>>
>> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
>> ---
>>
>> Notes:
>>      I marked this as v3, but it is basically a resend of v1 [1] with
>>      s/undefining/removing/ change.  I'm sending this even though the second
>>      version of the patch got in again because the v2 that we pushed didn't
>>      help.  I got convinced [2] that doing this with a job fixes it, but it
>>      doesn't, it just serializes the Create API after the Undefine API.  The
>>      only difference that the commit b629c64e [3] does is that it waits on
>>      obtaining job, but not on locking the domain.  That previous commit can
>>      be reverted if anyone wants, I see almost no point in it being there
>>      now.
>>
>>      [1] http://www.redhat.com/archives/libvir-list/2014-October/msg01055.html
>>      [2] http://www.redhat.com/archives/libvir-list/2014-October/msg01115.html
>>      [3] http://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=b629c64e
>>
>>   src/conf/domain_conf.c | 22 +++++++++++++++++++---
>>   src/conf/domain_conf.h |  1 +
>>   2 files changed, 20 insertions(+), 3 deletions(-)
>
>ACK
>

Thanks, I'll push it after the release.

Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20141212/f2294f21/attachment-0001.sig>


More information about the libvir-list mailing list