]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
Change rootfs pinning mechnism
authorChristian Seiler <christian@iwakd.de>
Thu, 12 Sep 2013 20:00:34 +0000 (22:00 +0200)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Thu, 12 Sep 2013 20:33:58 +0000 (15:33 -0500)
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>
src/lxc/conf.c

index 364e57198ac5400bac6e874e6084e8e09abd4a07..79220d1ff4d985a9844d7e3831cadbf1f4a06889 100644 (file)
@@ -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.
@@ -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;
 }