Friday, 9 May
2025
Fri, 9 May
'25
12:11 p.m.
Signed-off-by: Roman Bogorodskiy <bogorodskiy(a)gmail.com>
---
src/bhyve/bhyve_driver.c | 32 +++++++++++++++++++++++++++++++-
1 file changed, 31 insertions(+), 1 deletion(-)
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)
--
2.49.0