[libvirt] [PATCH 3/4] Trim /proc & /sys subtrees before mounting new instances

Stefan Berger stefanb at linux.vnet.ibm.com
Sat May 12 02:04:24 UTC 2012


On 05/11/2012 12:48 PM, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange"<berrange at redhat.com>
>
> Both /proc and /sys may have sub-mounts in them from the host
> OS. We must explicitly unmount them all before mounting the
> new instance over that location. If we don't then /proc/mounts
> will show the sub-mounts as existing, even though nothing will
> be able to access them, due to the over-mount.
>
> Signed-off-by: Daniel P. Berrange<berrange at redhat.com>
> ---
>   src/lxc/lxc_container.c |   61 ++++++++++++++++++++++++++++++++++++-----------
>   1 file changed, 47 insertions(+), 14 deletions(-)
>
> @@ -1054,13 +1057,36 @@ static int lxcContainerUnmountOldFS(void)
>           qsort(mounts, nmounts, sizeof(mounts[0]),
>                 lxcContainerChildMountSort);
>
> +    *mountsret = mounts;
> +    *nmountsret = nmounts;
> +    ret = 0;
> +
> +cleanup:
> +    endmntent(procmnt);
> +    return ret;
> +}
> +
> +static int lxcContainerUnmountSubtree(const char *prefix,
> +                                      bool isOldRootFS)
> +{
> +    char **mounts = NULL;
> +    size_t nmounts = 0;
> +    size_t i;
> +    int saveErrno;
> +    const char *failedUmount = NULL;
> +    int ret = -1;
> +
> +    VIR_DEBUG("Unmount subtreee from %s", prefix);
> +
> +    if (lxcContainerGetSubtree(prefix,&mounts,&nmounts)<  0)
> +        return -1;
>       for (i = 0 ; i<  nmounts ; i++) {
>           VIR_DEBUG("Umount %s", mounts[i]);
>           if (umount(mounts[i])<  0) {
>               char ebuf[1024];
>               failedUmount = mounts[i];
>               saveErrno = errno;
> -            VIR_WARN("Failed to unmount '%s', trying to detach root '%s': %s",
> +            VIR_WARN("Failed to unmount '%s', trying to detach subtree '%s': %s",
>                        failedUmount, mounts[nmounts-1],
>                        virStrerror(errno, ebuf, sizeof(ebuf)));
>               break;


This may be an existing issue - should the code not try to continue 
unmounting rather than break'ing follwing error above? Would leaving the 
loop here leave stale mounts behind?

    Stefan




More information about the libvir-list mailing list