[libvirt] [PATCH] Fix hang in qemudDomainCoreDump.
Chris Lalancette
clalance at redhat.com
Thu Mar 11 17:52:40 UTC 2010
On 03/11/2010 11:42 AM, Daniel Veillard wrote:
> On Thu, Mar 11, 2010 at 10:36:29AM -0500, Chris Lalancette wrote:
>> Currently if you dump the core of a qemu guest with
>> qemudDomainCoreDump, subsequent commands will hang
>> up libvirtd. This is because qemudDomainCoreDump
>> uses qemuDomainWaitForMigrationComplete, which expects
>> the qemuDriverLock to be held when it's called. This
>> patch does the simple thing and moves the qemuDriveUnlock
>> to the end of the qemudDomainCoreDump so that the driver
>> lock is held for the entirety of the call (as it is done
>> in qemudDomainSave). We will probably want to make the
>> lock more fine-grained than that in the future, but
>> we can fix both qemudDomainCoreDump and qemudDomainSave
>> at the same time.
>>
>> Signed-off-by: Chris Lalancette <clalance at redhat.com>
>> ---
>> src/qemu/qemu_driver.c | 4 ++--
>> 1 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>> index ee3dbd3..49983dd 100644
>> --- a/src/qemu/qemu_driver.c
>> +++ b/src/qemu/qemu_driver.c
>> @@ -4390,7 +4390,6 @@ static int qemudDomainCoreDump(virDomainPtr dom,
>>
>> qemuDriverLock(driver);
>> vm = virDomainFindByUUID(&driver->domains, dom->uuid);
>> - qemuDriverUnlock(driver);
>>
>> if (!vm) {
>> char uuidstr[VIR_UUID_STRING_BUFLEN];
>> @@ -4401,7 +4400,7 @@ static int qemudDomainCoreDump(virDomainPtr dom,
>> }
>> priv = vm->privateData;
>>
>> - if (qemuDomainObjBeginJob(vm) < 0)
>> + if (qemuDomainObjBeginJobWithDriver(driver, vm) < 0)
>> goto cleanup;
>>
>> if (!virDomainObjIsActive(vm)) {
>> @@ -4499,6 +4498,7 @@ cleanup:
>> virDomainObjUnlock(vm);
>> if (event)
>> qemuDomainEventQueue(driver, event);
>> + qemuDriverUnlock(driver);
>> return ret;
>> }
>>
>
> Okay, I don't see why CoreDump would need to use finer-grained locking
> thank Save,
Well, my point is that we really should make both of them have finer-grained
locking, since they are potentially very long operations (think of a guest
with a large amount of memory). But we can go back and fix them both later.
>
> ACK,
Thanks, I've pushed this now.
--
Chris Lalancette
More information about the libvir-list
mailing list