On 08/09/2017 03:02 PM, Daniel P. Berrange wrote:
> On Wed, Aug 09, 2017 at 02:55:36PM +0200, Michal Privoznik wrote:
>> On 08/09/2017 02:14 PM, Daniel P. Berrange wrote:
>>> On Wed, Aug 09, 2017 at 02:00:06PM +0200, Michal Privoznik wrote:
>>>> https://bugzilla.redhat.com/show_bug.cgi?id=1467245
>>>>
>>>> Currently, there's a bug when undefining a domain with NVRAM
>>>> store. Basically, the unlink() of the NVRAM store file happens
>>>> during the undefine procedure iff domain is inactive. So, if
>>>> domain is running and undefine is called the file is left behind.
>>>> It won't be removed in the domain cleanup process either
>>>> (qemuProcessStop). To avoid this forbid undefining domain with
>>>> NVRAM file.
>>>
>>> Why do we need to forbid it ? Even if QEMU still has an open
>>> file handle, it can continue to write to it after we unlink
>>> it.
>>>
>>>
>>
>> That's what my v1 does. Anyway, there's third option: just recently
>> Jirka added possibility to do some actions when domain is destroyed. He
>> needed it for some migration work, but the design is broad enough to fit
>> this problem too. What we can do is:
>>
>> if (flags & VIR_DOMAIN_UNDEFINE_NVRAM):
>> if domain is running:
>> register the callback /* that merely just unlinks the file */
>> else:
>> unlink
>> else:
>> if (!(flags & VIR_DOMAIN_UNDEFINE_KEEP_NVRAM)):
>> error
>>
>>
>> What do you guys think of this one?
>
> The callback will be lost if libvirtd restarts.