diff options
author | Miao Xie <miaox@cn.fujitsu.com> | 2014-09-03 15:35:33 +0200 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-09-17 22:38:33 +0200 |
commit | 935e5cc935bcbf9b3d0dd59fed7dbc0f2ebca6bc (patch) | |
tree | 2489d657687317839ab01cd1c617356851839726 /fs/btrfs/check-integrity.c | |
parent | Btrfs: fix unprotected assignment of the target device (diff) | |
download | linux-935e5cc935bcbf9b3d0dd59fed7dbc0f2ebca6bc.tar.xz linux-935e5cc935bcbf9b3d0dd59fed7dbc0f2ebca6bc.zip |
Btrfs: fix wrong disk size when writing super blocks
total_size will be changed when resizing a device, and disk_total_size
will be changed if resizing is successful. Meanwhile, the on-disk super
blocks of the previous transaction might not be updated. Considering
the consistency of the metadata in the previous transaction, We should
use the size in the previous transaction to check if the super block is
beyond the boundary of the device. Fix it.
Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs/btrfs/check-integrity.c')
-rw-r--r-- | fs/btrfs/check-integrity.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/btrfs/check-integrity.c b/fs/btrfs/check-integrity.c index e0033c843ce7..cb7f3fe9c9f6 100644 --- a/fs/btrfs/check-integrity.c +++ b/fs/btrfs/check-integrity.c @@ -807,7 +807,7 @@ static int btrfsic_process_superblock_dev_mirror( /* super block bytenr is always the unmapped device bytenr */ dev_bytenr = btrfs_sb_offset(superblock_mirror_num); - if (dev_bytenr + BTRFS_SUPER_INFO_SIZE > device->total_bytes) + if (dev_bytenr + BTRFS_SUPER_INFO_SIZE > device->commit_total_bytes) return -1; bh = __bread(superblock_bdev, dev_bytenr / 4096, BTRFS_SUPER_INFO_SIZE); |