fs: btrfs: Reject fs with sector size other than PAGE_SIZE
authorQu Wenruo <wqu@suse.com>
Thu, 26 Mar 2020 05:35:55 +0000 (13:35 +0800)
committerTom Rini <trini@konsulko.com>
Fri, 17 Apr 2020 02:13:50 +0000 (22:13 -0400)
Although in theory u-boot fs driver could easily support more sector
sizes, current code base doesn't have good enough way to grab sector
size yet.

This would cause problem for later LZO fixes which rely on sector size.

And considering that most u-boot boards are using 4K page size, which is
also the most common sector size for btrfs, rejecting fs with
non-page-sized sector size shouldn't cause much problem.

This should only be a quick fix before we implement better sector size
support.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Cc: Marek Behun <marek.behun@nic.cz>
Reviewed-by: Marek BehĂșn <marek.behun@nic.cz>
fs/btrfs/super.c

index 2dc4a6fcd7a3da9b331aa0b4d84329d7594df281..b693a073fc0b9106719ca9fecca33125778a2c95 100644 (file)
@@ -7,6 +7,7 @@
 
 #include "btrfs.h"
 #include <memalign.h>
+#include <linux/compat.h>
 
 #define BTRFS_SUPER_FLAG_SUPP  (BTRFS_HEADER_FLAG_WRITTEN      \
                                 | BTRFS_HEADER_FLAG_RELOC      \
@@ -232,6 +233,13 @@ int btrfs_read_superblock(void)
                return -1;
        }
 
+       if (sb->sectorsize != PAGE_SIZE) {
+               printf(
+       "%s: Unsupported sector size (%u), only supports %u as sector size\n",
+                       __func__, sb->sectorsize, PAGE_SIZE);
+               return -1;
+       }
+
        if (btrfs_info.sb.num_devices != 1) {
                printf("%s: Unsupported number of devices (%lli). This driver "
                       "only supports filesystem on one device.\n", __func__,