[lxc-devel] [PATCH] Change rootfs pinning mechnism

Serge Hallyn serge.hallyn at ubuntu.com
Thu Sep 12 20:33:02 UTC 2013


Quoting Christian Seiler (christian at iwakd.de):
> Chane pinning mechanism: Use $rootfs/lxc.hold instead of $rootfs.hold
> (in case $rootfs is a mountpoint itself), but delete the file
> immediately after creating it (but keep it open). This will keep the
> root filesystem busy but does not leave any unnecessary files lying
> around.
> 
> Signed-off-by: Christian Seiler <christian at iwakd.de>

Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>

> ---
>  src/lxc/conf.c |   12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> index 5f9ae87..291ea6f 100644
> --- a/src/lxc/conf.c
> +++ b/src/lxc/conf.c
> @@ -670,9 +670,10 @@ static int mount_rootfs_block(const char *rootfs, const char *target)
>  
>  /*
>   * pin_rootfs
> - * if rootfs is a directory, then open ${rootfs}.hold for writing for the
> - * duration of the container run, to prevent the container from marking the
> - * underlying fs readonly on shutdown.
> + * if rootfs is a directory, then open ${rootfs}/lxc.hold for writing for
> + * the duration of the container run, to prevent the container from marking
> + * the underlying fs readonly on shutdown. unlink the file immediately so
> + * no name pollution is happens
>   * return -1 on error.
>   * return -2 if nothing needed to be pinned.
>   * return an open fd (>=0) if we pinned it.
> @@ -699,11 +700,14 @@ int pin_rootfs(const char *rootfs)
>  	if (!S_ISDIR(s.st_mode))
>  		return -2;
>  
> -	ret = snprintf(absrootfspin, MAXPATHLEN, "%s%s", absrootfs, ".hold");
> +	ret = snprintf(absrootfspin, MAXPATHLEN, "%s/lxc.hold", absrootfs);
>  	if (ret >= MAXPATHLEN)
>  		return -1;
>  
>  	fd = open(absrootfspin, O_CREAT | O_RDWR, S_IWUSR|S_IRUSR);
> +	if (fd < 0)
> +		return fd;
> +	(void)unlink(absrootfspin);
>  	return fd;
>  }
>  
> -- 
> 1.7.10.4
> 




More information about the lxc-devel mailing list