]> xenbits.xensource.com Git - libvirt.git/commitdiff
Do not prematurely close loop devices in LXC controller
authorDaniel P. Berrange <berrange@redhat.com>
Fri, 15 Mar 2013 15:07:13 +0000 (15:07 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 19 Mar 2013 14:46:40 +0000 (14:46 +0000)
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@redhat.com>
src/lxc/lxc_controller.c

index 1508b9c281fd33b39541bde9289959f8bf8a8a9f..91dd8f1a7cd6201fdf4e368380406a2f6f7678fb 100644 (file)
@@ -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;