btrfs: fix disk-io.c/btrfs_read_dev_super with BTRFS_SUPER_MIRROR_MAX to control the loops
PATCH 1/1 btrfs: fix disk-io.c/btrfs_read_dev_super with BTRFS_SUPER_MIRROR_MAX to control the loops
To check the duplicated super blocks, use BTRFS_SUPER_MIRROR_MAX as the loops limit.
--- fs/btrfs/disk-io.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
fs/btrfs/disk-io.c +1 -1
@@ -2723,7 +2723,7 @@ struct buffer_head *btrfs_read_dev_super(struct block_device *bdev)* So, we need to add a special mount option to scan for * later supers, using BTRFS_SUPER_MIRROR_MAX instead */ -for (i =0 ; i <1 ; i++) { +for (i =0 ; i <BTRFS_SUPER_MIRROR_MAX ; i++) { bytenr =btrfs_sb_offset (i);if (bytenr +4096 >=i_size_read (bdev->bd_inode))break ;
Signature · 1 line
1.7.1
Quoted 24 lines · Wang Sheng-Hui
To check the duplicated super blocks, use
BTRFS_SUPER_MIRROR_MAXas the loops limit.Signed-off-by Wang Sheng-Hui <[email protected]>--- fs/btrfs/disk-io.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)fs/btrfs/disk-io.c +1
-2@@ -2723,7 +2723,7 @@ struct buffer_head *btrfs_read_dev_super(struct block_device *bdev)* So, we need to add a special mount option to scan for * later supers, using BTRFS_SUPER_MIRROR_MAX instead */ -for (i =0 ; i <1 ; i++) { +for (i =0 ; i <BTRFS_SUPER_MIRROR_MAX ; i++) { bytenr =btrfs_sb_offset (i);if (bytenr +4096 >=i_size_read (bdev->bd_inode))break ; --1.7.1
Quoted 4 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please fix the comment as well; if we check all the supers, then mounting as btrfs _will_ succeed after a different (non-btrfs) filesystem is created on the partition/device, pretty much guaranteeing it will be corrupted.
Quoted 13 lines · Wang Sheng-Hui
To check the duplicated super blocks, use
BTRFS_SUPER_MIRROR_MAXas the loops limit.Signed-off-by Wang Sheng-Hui <[email protected]>--- fs/btrfs/disk-io.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)fs/btrfs/disk-io.c +0
-0
fs/btrfs/disk-io.c struct buffer_head *btrfs_read_dev_super(struct block_device *bdev) · line 2729
Quoted 8 lines
fs/btrfs/disk-io.c +1
-1@@ -2723,7 +2723,7 @@ struct buffer_head *btrfs_read_dev_super(struct block_device *bdev)* So, we need to add a special mount option to scan for * later supers, using BTRFS_SUPER_MIRROR_MAX instead */ -for (i =0 ; i <1 ; i++) { +for (i =0 ; i <BTRFS_SUPER_MIRROR_MAX ; i++) { bytenr =btrfs_sb_offset (i);if (bytenr +4096 >=i_size_read (bdev->bd_inode))break ;
We don't want to do this, it should be left for -o recovery or some such mount option. Thanks,
Josef
Hi,
Quoted 13 lines · Wang Sheng-Hui
To check the duplicated super blocks, use
BTRFS_SUPER_MIRROR_MAXas the loops limit.Signed-off-by Wang Sheng-Hui<[email protected]>--- fs/btrfs/disk-io.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)fs/btrfs/disk-io.c +0
-0
fs/btrfs/disk-io.c struct buffer_head *btrfs_read_dev_super(struct block_device *bdev) · line 2729
Quoted 8 lines
fs/btrfs/disk-io.c +1
-1@@ -2723,7 +2723,7 @@ struct buffer_head *btrfs_read_dev_super(struct block_device *bdev)* So, we need to add a special mount option to scan for * later supers, using BTRFS_SUPER_MIRROR_MAX instead */ -for (i =0 ; i<1 ; i++) { +for (i =0 ; i<BTRFS_SUPER_MIRROR_MAX ; i++) { bytenr =btrfs_sb_offset (i);if (bytenr +4096 >=i_size_read (bdev->bd_inode))break ;
Pay attention that when a device is removed from a filesystem by the command "btrfs device delete", *only* the 1st superblock btrfs signature is zeroed [1]. This means that the other (backup) superblocks will be considered valid with your change.
[1] See the function btrfs_rm_device() in volume.c