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

John Ferlan jferlan at redhat.com
Tue Mar 19 14:17:59 UTC 2013


On 03/15/2013 12:32 PM, Daniel P. Berrange wrote:
> 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;
> 

Doesn't the call to virLXCControllerCloseLoopDevices() in
virLXCControllerStopInit() need to lose the ", true" parameter?

John




More information about the libvir-list mailing list