mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-21 19:02:25 +00:00
qemuDomainRemoveMemoryDevice: unlink() memory backing file
https://bugzilla.redhat.com/show_bug.cgi?id=1461214 Since fec8f9c49af we try to use predictable file names for 'memory-backend-file' objects. But that made us provide full path to qemu when hot plugging the object while previously we provided merely a directory. But this makes qemu behave differently. If qemu sees a path terminated with a directory it calls mkstemp() and unlinks the file immediately. But if it sees full path it just calls open(path, O_CREAT ..); and never unlinks the file. Therefore it's up to libvirt to unlink the file and not leave it behind. Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
93db7eea1b
commit
4d83a6722f
@ -3900,6 +3900,9 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver,
|
||||
if (qemuDomainNamespaceTeardownMemory(vm, mem) < 0)
|
||||
VIR_WARN("Unable to remove memory device from /dev");
|
||||
|
||||
if (qemuProcessDestroyMemoryBackingPath(driver, vm, mem) < 0)
|
||||
VIR_WARN("Unable to destroy memory backing path");
|
||||
|
||||
virDomainMemoryDefFree(mem);
|
||||
|
||||
/* fix the balloon size */
|
||||
|
@ -3494,6 +3494,32 @@ qemuProcessBuildDestroyMemoryPaths(virQEMUDriverPtr driver,
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
qemuProcessDestroyMemoryBackingPath(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainMemoryDefPtr mem)
|
||||
{
|
||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||
char *path = NULL;
|
||||
int ret = -1;
|
||||
|
||||
if (qemuGetMemoryBackingPath(vm->def, cfg, mem->info.alias, &path) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (unlink(path) < 0 &&
|
||||
errno != ENOENT) {
|
||||
virReportSystemError(errno, _("Unable to remove %s"), path);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
VIR_FREE(path);
|
||||
virObjectUnref(cfg);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
qemuProcessVNCAllocatePorts(virQEMUDriverPtr driver,
|
||||
virDomainGraphicsDefPtr graphics,
|
||||
|
@ -43,6 +43,10 @@ int qemuProcessBuildDestroyMemoryPaths(virQEMUDriverPtr driver,
|
||||
virDomainMemoryDefPtr mem,
|
||||
bool build);
|
||||
|
||||
int qemuProcessDestroyMemoryBackingPath(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainMemoryDefPtr mem);
|
||||
|
||||
void qemuProcessAutostartAll(virQEMUDriverPtr driver);
|
||||
void qemuProcessReconnectAll(virConnectPtr conn, virQEMUDriverPtr driver);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user