fstools: add btrfs support
[project/fstools.git] / block.c
diff --git a/block.c b/block.c
index d5c3937..d7a9c5f 100644 (file)
--- a/block.c
+++ b/block.c
@@ -530,6 +530,7 @@ static void cache_load(int mtd)
        _cache_load("/dev/hd*");
        _cache_load("/dev/md*");
        _cache_load("/dev/vd*");
+       _cache_load("/dev/xvd*");
        _cache_load("/dev/mapper/*");
 }
 
@@ -708,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 *btrfsck = "/usr/bin/btrfsck";
        const char *ckfs;
 
        /* UBIFS does not need stuff like fsck */
@@ -720,6 +722,8 @@ static void check_filesystem(struct probe_info *pr)
                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;
@@ -735,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);
+               } 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 +1435,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;
                }