diff options
author | Felix Fietkau <nbd@openwrt.org> | 2014-12-01 22:04:49 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2014-12-01 22:04:49 +0100 |
commit | e65232440111b8f6654218033431e5bdd20525c2 (patch) | |
tree | a132513c7e624f9993e5e79edf5525a979132ea6 | |
parent | 45a8b778ef58c91405576c3129cfabfa1dd54703 (diff) | |
download | fstools-e65232440111b8f6654218033431e5bdd20525c2.tar.gz |
mount: fix sysupgrade handling for mainline overlayfs
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-rw-r--r-- | libfstools/mount.c | 8 |
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)) { |