btrfs: warn about dev extents that are inside the reserved range
authorQu Wenruo <wqu@suse.com>
Mon, 13 Jun 2022 07:06:35 +0000 (15:06 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 25 Jul 2022 15:45:36 +0000 (17:45 +0200)
Btrfs on-disk format has reserved the first 1MiB for the primary super
block (at 64KiB offset) and bootloaders may also use this space.

This behavior is only introduced since v4.1 btrfs-progs release,
although kernel can ensure we never touch the reserved range of super
blocks, it's better to inform the end users, and a balance will resolve
the problem.

Signed-off-by: Qu Wenruo <wqu@suse.com>
[ update changelog and message ]
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/volumes.c

index e6af960..0760403 100644 (file)
@@ -7996,6 +7996,16 @@ static int verify_one_dev_extent(struct btrfs_fs_info *fs_info,
                goto out;
        }
 
+       /*
+        * Very old mkfs.btrfs (before v4.1) will not respect the reserved
+        * space. Although kernel can handle it without problem, better to warn
+        * the users.
+        */
+       if (physical_offset < BTRFS_DEVICE_RANGE_RESERVED)
+               btrfs_warn(fs_info,
+               "devid %llu physical %llu len %llu inside the reserved space",
+                          devid, physical_offset, physical_len);
+
        for (i = 0; i < map->num_stripes; i++) {
                if (map->stripes[i].dev->devid == devid &&
                    map->stripes[i].physical == physical_offset) {