[libvirt] [PATCH 7/7] Do not prematurely close loop devices in LXC controller

Daniel P. Berrange berrange at redhat.com
Fri Mar 15 16:32:44 UTC 2013


From: "Daniel P. Berrange" <berrange at redhat.com>

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: Daniel P. Berrange <berrange at redhat.com>
---
 src/lxc/lxc_controller.c | 20 +++-----------------
 1 file changed, 3 insertions(+), 17 deletions(-)

diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index c433fb1..9545df3 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -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;
 }
@@ -1616,10 +1606,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;
-- 
1.7.11.7




More information about the libvir-list mailing list