Commit 38b34913 by Serge Hallyn Committed by Stéphane Graber

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: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com> Acked-by: 's avatarKATOH Yasufumi <karma@jazz.email.ne.jp> Acked-by: 's avatarStéphane Graber <stgraber@ubuntu.com>
parent ab35147c
...@@ -2138,6 +2138,28 @@ static int overlayfs_detect(const char *path) ...@@ -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) ...@@ -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) ...@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment