mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-09 08:00:51 +00:00
Use 'overlay' as fs name when needed
Close #389 We will probably also want to switch the order of the mount attempts, as the new overlay fs should quickly become the more common scenario. Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com> Acked-by: KATOH Yasufumi <karma@jazz.email.ne.jp> Acked-by: Stéphane Graber <stgraber@ubuntu.com>
This commit is contained in:
parent
ab35147cde
commit
38b34913fa
@ -2138,6 +2138,28 @@ static int overlayfs_detect(const char *path)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *overlayfs_name;
|
||||||
|
static char *detect_overlayfs_name(void)
|
||||||
|
{
|
||||||
|
char *v = "overlayfs";
|
||||||
|
char *line = NULL;
|
||||||
|
size_t len = 0;
|
||||||
|
FILE *f = fopen("/proc/filesystems", "r");
|
||||||
|
if (!f)
|
||||||
|
return v;
|
||||||
|
|
||||||
|
while (getline(&line, &len, f) != -1) {
|
||||||
|
if (strcmp(line, "nodev\toverlay\n") == 0) {
|
||||||
|
v = "overlay";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
free(line);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// XXXXXXX plain directory bind mount ops
|
// XXXXXXX plain directory bind mount ops
|
||||||
//
|
//
|
||||||
@ -2156,6 +2178,9 @@ static int overlayfs_mount(struct bdev *bdev)
|
|||||||
if (!bdev->src || !bdev->dest)
|
if (!bdev->src || !bdev->dest)
|
||||||
return -22;
|
return -22;
|
||||||
|
|
||||||
|
if (!overlayfs_name)
|
||||||
|
overlayfs_name = detect_overlayfs_name();
|
||||||
|
|
||||||
// separately mount it first
|
// separately mount it first
|
||||||
// mount -t overlayfs -oupperdir=${upper},lowerdir=${lower} lower dest
|
// mount -t overlayfs -oupperdir=${upper},lowerdir=${lower} lower dest
|
||||||
dup = alloca(strlen(bdev->src)+1);
|
dup = alloca(strlen(bdev->src)+1);
|
||||||
@ -2216,13 +2241,13 @@ static int overlayfs_mount(struct bdev *bdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// mount without workdir option for overlayfs before v21
|
// mount without workdir option for overlayfs before v21
|
||||||
ret = mount(lower, bdev->dest, "overlayfs", MS_MGC_VAL | mntflags, options);
|
ret = mount(lower, bdev->dest, overlayfs_name, MS_MGC_VAL | mntflags, options);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
INFO("overlayfs: error mounting %s onto %s options %s. retry with workdir",
|
INFO("overlayfs: error mounting %s onto %s options %s. retry with workdir",
|
||||||
lower, bdev->dest, options);
|
lower, bdev->dest, options);
|
||||||
|
|
||||||
// retry with workdir option for overlayfs v22 and higher
|
// retry with workdir option for overlayfs v22 and higher
|
||||||
ret = mount(lower, bdev->dest, "overlayfs", MS_MGC_VAL | mntflags, options_work);
|
ret = mount(lower, bdev->dest, overlayfs_name, MS_MGC_VAL | mntflags, options_work);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
SYSERROR("overlayfs: error mounting %s onto %s options %s",
|
SYSERROR("overlayfs: error mounting %s onto %s options %s",
|
||||||
lower, bdev->dest, options_work);
|
lower, bdev->dest, options_work);
|
||||||
|
Loading…
Reference in New Issue
Block a user