Split out the logic of unlinking devices from qemuDomainNamespaceTeardownHostdev for reuse in other functions. --- src/qemu/qemu_domain.c | 55 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 696f4751e..ddc93776b 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -9973,6 +9973,43 @@ qemuDomainNamespaceMknodPath(virDomainObjPtr vm, } +static int +qemuDomainNamespaceUnlinkPaths(virDomainObjPtr vm, + const char **paths, + size_t npaths) +{ + qemuDomainObjPrivatePtr priv = vm->privateData; + virQEMUDriverPtr driver = priv->driver; + virQEMUDriverConfigPtr cfg; + char **devMountsPath = NULL; + size_t ndevMountsPath = 0; + size_t i; + int ret = -1; + + if (!qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT)) + return 0; + + cfg = virQEMUDriverGetConfig(driver); + + if (qemuDomainGetPreservedMounts(cfg, vm, + &devMountsPath, NULL, + &ndevMountsPath) < 0) + goto cleanup; + + for (i = 0; i < npaths; i++) { + if (qemuDomainDetachDeviceUnlink(driver, vm, paths[i], + devMountsPath, ndevMountsPath) < 0) + goto cleanup; + } + + + cleanup: + virStringListFreeCount(devMountsPath, ndevMountsPath); + virObjectUnref(cfg); + return ret; +} + + int qemuDomainNamespaceSetupDisk(virQEMUDriverPtr driver ATTRIBUTE_UNUSED, virDomainObjPtr vm, @@ -10050,13 +10087,10 @@ qemuDomainNamespaceSetupHostdev(virQEMUDriverPtr driver ATTRIBUTE_UNUSED, int -qemuDomainNamespaceTeardownHostdev(virQEMUDriverPtr driver, +qemuDomainNamespaceTeardownHostdev(virQEMUDriverPtr driver ATTRIBUTE_UNUSED, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev) { - virQEMUDriverConfigPtr cfg = NULL; - char **devMountsPath = NULL; - size_t ndevMountsPath = 0; int ret = -1; char **paths = NULL; size_t i, npaths = 0; @@ -10068,25 +10102,14 @@ qemuDomainNamespaceTeardownHostdev(virQEMUDriverPtr driver, &npaths, &paths, NULL) < 0) goto cleanup; - cfg = virQEMUDriverGetConfig(driver); - if (qemuDomainGetPreservedMounts(cfg, vm, - &devMountsPath, NULL, - &ndevMountsPath) < 0) + if (npaths != 0 && qemuDomainNamespaceUnlinkPaths(vm, (const char **)paths, npaths) < 0) goto cleanup; - for (i = 0; i < npaths; i++) { - if (qemuDomainDetachDeviceUnlink(driver, vm, paths[i], - devMountsPath, ndevMountsPath) < 0) - goto cleanup; - } - ret = 0; cleanup: for (i = 0; i < npaths; i++) VIR_FREE(paths[i]); VIR_FREE(paths); - virStringListFreeCount(devMountsPath, ndevMountsPath); - virObjectUnref(cfg); return ret; } -- 2.13.6 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list