[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