You need to sign in or sign up before continuing.
提交 7a931a42 编写于 作者: J Ján Tomko

Introduce qemuDomainNamespaceUnlinkPaths

Split out the logic of unlinking devices from
qemuDomainNamespaceTeardownHostdev for reuse in other functions.
上级 323b9f72
......@@ -9981,6 +9981,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,
......@@ -10058,13 +10095,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;
......@@ -10076,25 +10110,15 @@ 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;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册