mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-07-27 12:37:35 +00:00
rootfs pinning: On NFS, make file hidden but don't delete it
On NFS, avoid random names of the root pin file due to "NFS silly renaming" but use a fixed hidden name instead.
This commit is contained in:
parent
83ffaa1d39
commit
63fc76c3e0
@ -539,10 +539,11 @@ int run_script(const char *name, const char *section, const char *script, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* pin_rootfs
|
/* pin_rootfs
|
||||||
* if rootfs is a directory, then open ${rootfs}/lxc.hold for writing for
|
* if rootfs is a directory, then open ${rootfs}/.lxc-keep for writing for
|
||||||
* the duration of the container run, to prevent the container from marking
|
* the duration of the container run, to prevent the container from marking
|
||||||
* the underlying fs readonly on shutdown. unlink the file immediately so
|
* the underlying fs readonly on shutdown. unlink the file immediately so
|
||||||
* no name pollution is happens
|
* no name pollution is happens.
|
||||||
|
* don't unlink on NFS to avoid random named stale handles.
|
||||||
* return -1 on error.
|
* return -1 on error.
|
||||||
* return -2 if nothing needed to be pinned.
|
* return -2 if nothing needed to be pinned.
|
||||||
* return an open fd (>=0) if we pinned it.
|
* return an open fd (>=0) if we pinned it.
|
||||||
@ -552,6 +553,7 @@ int pin_rootfs(const char *rootfs)
|
|||||||
int fd, ret;
|
int fd, ret;
|
||||||
char absrootfs[MAXPATHLEN], absrootfspin[MAXPATHLEN];
|
char absrootfs[MAXPATHLEN], absrootfspin[MAXPATHLEN];
|
||||||
struct stat s;
|
struct stat s;
|
||||||
|
struct statfs sfs;
|
||||||
|
|
||||||
if (rootfs == NULL || strlen(rootfs) == 0)
|
if (rootfs == NULL || strlen(rootfs) == 0)
|
||||||
return -2;
|
return -2;
|
||||||
@ -570,7 +572,7 @@ int pin_rootfs(const char *rootfs)
|
|||||||
if (!S_ISDIR(s.st_mode))
|
if (!S_ISDIR(s.st_mode))
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
ret = snprintf(absrootfspin, MAXPATHLEN, "%s/lxc.hold", absrootfs);
|
ret = snprintf(absrootfspin, MAXPATHLEN, "%s/.lxc-keep", absrootfs);
|
||||||
if (ret >= MAXPATHLEN)
|
if (ret >= MAXPATHLEN)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -578,6 +580,15 @@ int pin_rootfs(const char *rootfs)
|
|||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return fd;
|
return fd;
|
||||||
|
|
||||||
|
if (fstatfs (fd, &sfs)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sfs.f_type == NFS_SUPER_MAGIC) {
|
||||||
|
DEBUG("rootfs on NFS, not unlinking pin file \"%s\".", absrootfspin);
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
(void)unlink(absrootfspin);
|
(void)unlink(absrootfspin);
|
||||||
|
|
||||||
return fd;
|
return fd;
|
||||||
|
Loading…
Reference in New Issue
Block a user