On Mon, Aug 07, 2017 at 02:20: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). One of the solutions is to remove if
> regardless of the domain state and rely on qemu having the file
> opened. This still has a downside that if the domain is defined
> back the NVRAM store file is going to be new, any changes to the
> current one are lost (just like with any other file that is
> deleted while a process has it opened). But is it really a
> downside?
>
It might be. Why don't we disable removing it when the domain is
running? We have some precedence for this. The place which already
deals with this possibility is tools/virsh-domain.c in the cmdUndefine()
where we handle --remove-all-storage. If you look at the help of that
command it also says:
--nvram remove nvram file, if inactive
And that makes sense to me. What doesn't, on the other hand, is that it
also says:
--keep-nvram keep nvram file, if inactive
I don't get the "if inactive" there. But I'm not going to check who
pushed that. At least not again =)
Okay, I'll write a patch that:
a) forbids undefine for active domains, unless
b) KEEP_NVRAM flag is specified.
Michal