[LEDE-DEV] fstools: add extroot btrfs support to block-mount

Message ID CAJjz_Nhaj0XwcyTzLsSF32dGA6OrU2oJaTBBYkEd+JRzQD5rDw@mail.gmail.com
State Accepted
Headers show

Commit Message

Robert Young June 25, 2017, 2:35 p.m.
Post Installation Checks:

root@LEDE:/# strings mtdblock6/upper/sbin/block | grep ext4 | grep f2fs
extroot: unsupported filesystem %s, try ext4, f2fs, btrfs or ubifs
root@LEDE:/#

root@LEDE:/# cat mtdblock6/upper/etc/config/fstab
config 'global'
option anon_swap '0'
option anon_mount '0'
option auto_swap '0'
option auto_mount '1'
option delay_root '5'
option check_fs '0'

config 'mount'
option device '/dev/sda2'
option target '/overlay'
option fstype 'btrfs'
option options 'rw,noatime,async,compress-force=zlib,ssd,noacl,space_cache,subvol=/OpenWrt'
option enabled '1'
option enabled_fsck '0'
option is_rootfs '1'

root@LEDE:/#

root@LEDE:/# mount
/dev/mtdblock5 on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)
/dev/sda2 on /overlay type btrfs
(rw,noatime,compress-force=zlib,ssd,noacl,space_cache,subvolid=257,subvol=/OpenWrt)
overlayfs:/overlay on / type overlay
(rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work)
tmpfs on /dev type tmpfs (rw,nosuid,relatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600)
root@LEDE:/#

root@LEDE:/# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 2.3M      2.3M         0 100% /rom
tmpfs                   251.1M    768.0K    250.3M   0% /tmp
/dev/sda2                28.4G    144.4M     28.0G   1% /overlay
overlayfs:/overlay       28.4G    144.4M     28.0G   1% /
tmpfs                   512.0K         0    512.0K   0% /dev
root@LEDE:/#

# https://git.lede-project.org/project/fstools.git

Signed-off-by: Robert Young <yayooo@gmail.com>
---
 block.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

                }

--
2.13.1

Patch

diff --git a/block.c b/block.c
index d5c3937..3424462 100644
--- a/block.c
+++ b/block.c
@@ -707,6 +707,7 @@  static void check_filesystem(struct probe_info *pr)
        struct stat statbuf;
        const char *e2fsck = "/usr/sbin/e2fsck";
        const char *f2fsck = "/usr/sbin/fsck.f2fs";
+       const char *btrfsck = "/usr/bin/btrfsck";
        const char *dosfsck = "/usr/sbin/dosfsck";
        const char *ckfs;

@@ -718,6 +719,8 @@  static void check_filesystem(struct probe_info *pr)
                ckfs = dosfsck;
        } else if (!strncmp(pr->type, "f2fs", 4)) {
                ckfs = f2fsck;
+       } else if (!strncmp(pr->type, "btrfs", 5)) {
+               ckfs = btrfsck;
        } else if (!strncmp(pr->type, "ext", 3)) {
                ckfs = e2fsck;
        } else {
@@ -735,6 +738,9 @@  static void check_filesystem(struct probe_info *pr)
                if(!strncmp(pr->type, "f2fs", 4)) {
                        execl(ckfs, ckfs, "-f", pr->dev, NULL);
                        exit(-1);
+               } else if(!strncmp(pr->type, "btrfs", 5)) {
+                       execl(ckfs, ckfs, "--repair", pr->dev, NULL);
+                       exit(-1);
                } else {
                        execl(ckfs, ckfs, "-p", pr->dev, NULL);
                        exit(-1);
@@ -1428,8 +1434,9 @@  static int mount_extroot(char *cfg)
        if (pr) {
                if (strncmp(pr->type, "ext", 3) &&
                    strncmp(pr->type, "f2fs", 4) &&
+                   strncmp(pr->type, "btrfs", 5) &&
                    strncmp(pr->type, "ubifs", 5)) {
-                       ULOG_ERR("extroot: unsupported filesystem %s,
try ext4, f2fs or ubifs\n", pr->type);
+                       ULOG_ERR("extroot: unsupported filesystem %s,
try ext4, f2fs, btrfs or ubifs\n", pr->type);
                        return -1;