summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2014-12-01 22:04:49 +0100
committerFelix Fietkau <nbd@openwrt.org>2014-12-01 22:04:49 +0100
commite65232440111b8f6654218033431e5bdd20525c2 (patch)
treea132513c7e624f9993e5e79edf5525a979132ea6
parent45a8b778ef58c91405576c3129cfabfa1dd54703 (diff)
downloadfstools-e65232440111b8f6654218033431e5bdd20525c2.tar.gz
mount: fix sysupgrade handling for mainline overlayfs
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-rw-r--r--libfstools/mount.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/libfstools/mount.c b/libfstools/mount.c
index 970b9cf..e095455 100644
--- a/libfstools/mount.c
+++ b/libfstools/mount.c
@@ -98,10 +98,13 @@ fopivot(char *rw_root, char *ro_root)
*/
snprintf(lowerdir, sizeof(lowerdir), "lowerdir=/,upperdir=%s", rw_root);
if (mount(overlay, "/mnt", "overlayfs", MS_NOATIME, lowerdir)) {
- char upperdir[64], workdir[64];
+ 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(lowerdir, sizeof(lowerdir), "lowerdir=/,upperdir=%s,workdir=%s",
upperdir, workdir);
@@ -115,6 +118,9 @@ fopivot(char *rw_root, char *ro_root)
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, lowerdir)) {
if (mount(overlay, "/mnt", "overlayfs", MS_NOATIME, lowerdir)) {