提交 0a418355 编写于 作者: D Daniel P. Berrange

Do not prematurely close loop devices in LXC controller

The LXC controller is closing loop devices as soon as the
container has started. This is fine if the loop device
was setup as a mounted filesystem, but if we're just passing
through the loop device as a disk, nothing else is keeping
it open. Thus we must keep the loop device FDs open for as
long the libvirt_lxc process is running.
Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
上级 1760258c
......@@ -199,22 +199,12 @@ error:
}
static int virLXCControllerCloseLoopDevices(virLXCControllerPtr ctrl,
bool force)
static int virLXCControllerCloseLoopDevices(virLXCControllerPtr ctrl)
{
size_t i;
for (i = 0 ; i < ctrl->nloopDevs ; i++) {
if (force) {
VIR_FORCE_CLOSE(ctrl->loopDevFds[i]);
} else {
if (VIR_CLOSE(ctrl->loopDevFds[i]) < 0) {
virReportSystemError(errno, "%s",
_("Unable to close loop device"));
return -1;
}
}
}
for (i = 0 ; i < ctrl->nloopDevs ; i++)
VIR_FORCE_CLOSE(ctrl->loopDevFds[i]);
return 0;
}
......@@ -225,7 +215,7 @@ static void virLXCControllerStopInit(virLXCControllerPtr ctrl)
if (ctrl->initpid == 0)
return;
virLXCControllerCloseLoopDevices(ctrl, true);
virLXCControllerCloseLoopDevices(ctrl);
virProcessAbort(ctrl->initpid);
ctrl->initpid = 0;
}
......@@ -1546,10 +1536,6 @@ virLXCControllerRun(virLXCControllerPtr ctrl)
/* Now the container is fully setup... */
/* ...we can close the loop devices... */
if (virLXCControllerCloseLoopDevices(ctrl, false) < 0)
goto cleanup;
/* ...and reduce our privileges */
if (lxcControllerClearCapabilities() < 0)
goto cleanup;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册