Skip to content

Commit

Permalink
Change rootfs pinning mechnism
Browse files Browse the repository at this point in the history
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@iwakd.de>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
  • Loading branch information
chris-se authored and hallyn committed Sep 12, 2013
1 parent 368bbc0 commit b7ed4bf
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/lxc/conf.c
Expand Up @@ -671,9 +671,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.
Expand All @@ -700,11 +701,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;
}

Expand Down

0 comments on commit b7ed4bf

Please sign in to comment.