mount: remove support for legacy overlayfs before v2.3
authorDaniel Golle <daniel@makrotopia.org>
Sun, 11 Oct 2020 00:06:52 +0000 (01:06 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Fri, 16 Oct 2020 00:48:40 +0000 (01:48 +0100)
overlayfs has been in mainline since Linux v3.18 (OpenWrt CC 15.05).
Remove support for pre-mainline overlayfs.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
libfstools/mount.c

index c7f278979a59ad0b7e770a6771df288153bd0816..d61a80f32a03f7d7f09543599e7a4b3f1be46b35 100644 (file)
@@ -94,7 +94,8 @@ pivot(char *new, char *old)
 int
 fopivot(char *rw_root, char *ro_root)
 {
-       char overlay[64], mount_options[64];
+       char overlay[64], mount_options[64], upperdir[64], workdir[64], upgrade[64], upgrade_dest[64];
+       struct stat st;
 
        if (find_filesystem("overlay")) {
                ULOG_ERR("BUG: no suitable fs found\n");
@@ -102,44 +103,29 @@ fopivot(char *rw_root, char *ro_root)
        }
 
        snprintf(overlay, sizeof(overlay), "overlayfs:%s", rw_root);
+       snprintf(upperdir, sizeof(upperdir), "%s/upper", rw_root);
+       snprintf(workdir, sizeof(workdir), "%s/work", rw_root);
+       snprintf(upgrade, sizeof(upgrade), "%s/sysupgrade.tgz", rw_root);
+       snprintf(upgrade_dest, sizeof(upgrade_dest), "%s/sysupgrade.tgz", upperdir);
+       snprintf(mount_options, sizeof(mount_options), "lowerdir=/,upperdir=%s,workdir=%s",
+                upperdir, workdir);
 
        /*
-        * First, try to mount without a workdir, for overlayfs v22 and before.
-        * If it fails, it means that we are probably using a v23 and
-        * later versions that require a workdir
+        * Overlay FS v23 and later requires both a upper and
+        * a work directory, both on the same filesystem, but
+        * not part of the same subtree.
+        * We can't really deal with these constraints without
+        * creating two new subdirectories in /overlay.
         */
-       snprintf(mount_options, sizeof(mount_options), "lowerdir=/,upperdir=%s", rw_root);
-       if (mount(overlay, "/mnt", "overlayfs", MS_NOATIME, mount_options)) {
-               char upperdir[64], workdir[64], upgrade[64], upgrade_dest[64];
-               struct stat st;
-
-               snprintf(upperdir, sizeof(upperdir), "%s/upper", rw_root);
-               snprintf(workdir, sizeof(workdir), "%s/work", rw_root);
-               snprintf(upgrade, sizeof(upgrade), "%s/sysupgrade.tgz", rw_root);
-               snprintf(upgrade_dest, sizeof(upgrade_dest), "%s/sysupgrade.tgz", upperdir);
-               snprintf(mount_options, sizeof(mount_options), "lowerdir=/,upperdir=%s,workdir=%s",
-                        upperdir, workdir);
-
-               /*
-                * Overlay FS v23 and later requires both a upper and
-                * a work directory, both on the same filesystem, but
-                * not part of the same subtree.
-                * We can't really deal with these constraints without
-                * creating two new subdirectories in /overlay.
-                */
-               mkdir(upperdir, 0755);
-               mkdir(workdir, 0755);
-
-               if (stat(upgrade, &st) == 0)
-                   rename(upgrade, upgrade_dest);
-
-               /* Mainlined overlayfs has been renamed to "overlay", try that first */
-               if (mount(overlay, "/mnt", "overlay", MS_NOATIME, mount_options)) {
-                       if (mount(overlay, "/mnt", "overlayfs", MS_NOATIME, mount_options)) {
-                               ULOG_ERR("mount failed: %s, options %m\n", mount_options);
-                               return -1;
-                       }
-               }
+       mkdir(upperdir, 0755);
+       mkdir(workdir, 0755);
+
+       if (stat(upgrade, &st) == 0)
+           rename(upgrade, upgrade_dest);
+
+       if (mount(overlay, "/mnt", "overlay", MS_NOATIME, mount_options)) {
+               ULOG_ERR("mount failed: %s, options %m\n", mount_options);
+               return -1;
        }
 
        return pivot("/mnt", ro_root);