From: Roman Bogorodskiy Date: Tue, 6 May 2025 16:58:29 +0000 (+0200) Subject: bhyve: support removing NVRAM on domain undefine X-Git-Tag: v11.4.0-rc1~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5fdcf07e5d2fd3b45a7280d8172cc358ba2a20b9;p=thirdparty%2Flibvirt.git bhyve: support removing NVRAM on domain undefine Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index 684346952d..db7d440a97 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -533,9 +533,19 @@ bhyveDomainUndefineFlags(virDomainPtr domain, unsigned int flags) struct _bhyveConn *privconn = domain->conn->privateData; virObjectEvent *event = NULL; virDomainObj *vm; + g_autofree char *nvram_path = NULL; int ret = -1; - virCheckFlags(0, -1); + virCheckFlags(VIR_DOMAIN_UNDEFINE_NVRAM | + VIR_DOMAIN_UNDEFINE_KEEP_NVRAM, -1); + + if ((flags & VIR_DOMAIN_UNDEFINE_NVRAM) && + (flags & VIR_DOMAIN_UNDEFINE_KEEP_NVRAM)) { + virReportError(VIR_ERR_OPERATION_INVALID, + "%s", _("cannot both keep and delete nvram")); + return -1; + } + if (!(vm = bhyveDomObjFromDomain(domain))) goto cleanup; @@ -548,6 +558,26 @@ bhyveDomainUndefineFlags(virDomainPtr domain, unsigned int flags) goto cleanup; } + if (vm->def->os.loader && vm->def->os.loader->nvram && + virStorageSourceIsLocalStorage(vm->def->os.loader->nvram)) { + nvram_path = g_strdup(vm->def->os.loader->nvram->path); + } + + if (nvram_path && virFileExists(nvram_path)) { + if ((flags & VIR_DOMAIN_UNDEFINE_NVRAM)) { + if (unlink(nvram_path) < 0) { + virReportSystemError(errno, + _("failed to remove nvram: %1$s"), + nvram_path); + goto cleanup; + } + } else if (!(flags & VIR_DOMAIN_UNDEFINE_KEEP_NVRAM)) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("cannot undefine domain with nvram")); + goto cleanup; + } + } + if (virDomainDeleteConfig(BHYVE_CONFIG_DIR, BHYVE_AUTOSTART_DIR, vm) < 0)