mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-21 01:50:05 +07:00
btrfs: round down size diff when shrinking/growing device
Further testing showed that the fix introduced in7dfb8be11b
("btrfs: Round down values which are written for total_bytes_size") was insufficient and it could still lead to discrepancies between the total_bytes in the super block and the device total bytes. So this patch also ensures that the difference between old/new sizes when shrinking/growing is also rounded down. This ensure that we won't be subtracting/adding a non-sectorsize multiples to the superblock/device total sizees. Fixes:7dfb8be11b
("btrfs: Round down values which are written for total_bytes_size") Signed-off-by: Nikolay Borisov <nborisov@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
17024ad0a0
commit
0e4324a4c3
@ -2702,7 +2702,7 @@ int btrfs_grow_device(struct btrfs_trans_handle *trans,
|
||||
|
||||
mutex_lock(&fs_info->chunk_mutex);
|
||||
old_total = btrfs_super_total_bytes(super_copy);
|
||||
diff = new_size - device->total_bytes;
|
||||
diff = round_down(new_size - device->total_bytes, fs_info->sectorsize);
|
||||
|
||||
if (new_size <= device->total_bytes ||
|
||||
device->is_tgtdev_for_dev_replace) {
|
||||
@ -4406,7 +4406,7 @@ int btrfs_shrink_device(struct btrfs_device *device, u64 new_size)
|
||||
u64 diff;
|
||||
|
||||
new_size = round_down(new_size, fs_info->sectorsize);
|
||||
diff = old_size - new_size;
|
||||
diff = round_down(old_size - new_size, fs_info->sectorsize);
|
||||
|
||||
if (device->is_tgtdev_for_dev_replace)
|
||||
return -EINVAL;
|
||||
|
Loading…
Reference in New Issue
Block a user