fstools: add btrfs support
authorRobert Young <yayooo@gmail.com>
Mon, 31 Jul 2017 16:49:59 +0000 (18:49 +0200)
committerJohn Crispin <john@phrozen.org>
Mon, 31 Jul 2017 16:49:59 +0000 (18:49 +0200)
Signed-off-by: Robert Young <yayooo@gmail.com>
block.c

diff --git a/block.c b/block.c
index 3e4cfb5..d7a9c5f 100644 (file)
--- a/block.c
+++ b/block.c
@@ -709,6 +709,7 @@ static void check_filesystem(struct probe_info *pr)
        const char *e2fsck = "/usr/sbin/e2fsck";
        const char *f2fsck = "/usr/sbin/fsck.f2fs";
        const char *dosfsck = "/usr/sbin/dosfsck";
        const char *e2fsck = "/usr/sbin/e2fsck";
        const char *f2fsck = "/usr/sbin/fsck.f2fs";
        const char *dosfsck = "/usr/sbin/dosfsck";
+       const char *btrfsck = "/usr/bin/btrfsck";
        const char *ckfs;
 
        /* UBIFS does not need stuff like fsck */
        const char *ckfs;
 
        /* UBIFS does not need stuff like fsck */
@@ -721,6 +722,8 @@ static void check_filesystem(struct probe_info *pr)
                ckfs = f2fsck;
        } else if (!strncmp(pr->type, "ext", 3)) {
                ckfs = e2fsck;
                ckfs = f2fsck;
        } else if (!strncmp(pr->type, "ext", 3)) {
                ckfs = e2fsck;
+       } else if (!strncmp(pr->type, "btrfs", 5)) {
+               ckfs = btrfsck;
        } else {
                ULOG_ERR("check_filesystem: %s is not supported\n", pr->type);
                return;
        } else {
                ULOG_ERR("check_filesystem: %s is not supported\n", pr->type);
                return;
@@ -736,6 +739,9 @@ static void check_filesystem(struct probe_info *pr)
                if(!strncmp(pr->type, "f2fs", 4)) {
                        execl(ckfs, ckfs, "-f", pr->dev, NULL);
                        exit(-1);
                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);
                } else {
                        execl(ckfs, ckfs, "-p", pr->dev, NULL);
                        exit(-1);
@@ -1429,8 +1435,9 @@ static int mount_extroot(char *cfg)
        if (pr) {
                if (strncmp(pr->type, "ext", 3) &&
                    strncmp(pr->type, "f2fs", 4) &&
        if (pr) {
                if (strncmp(pr->type, "ext", 3) &&
                    strncmp(pr->type, "f2fs", 4) &&
+                   strncmp(pr->type, "btrfs", 5) &&
                    strncmp(pr->type, "ubifs", 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;
                }
 
                        return -1;
                }