Skip to content

Commit 7df69d3

Browse files
Miao Xiemasoncl
authored andcommitted
Btrfs: Fix wrong device size when we are resizing the device
total_bytes of device is just a in-memory variant which is used to record the size of the device, and it might be changed before we resize a device, if the resize operation fails, it will be fallbacked. But some code used it to update on-disk metadata of the device, it would cause the problem that on-disk metadata of the devices was not consistent. We should use the other variant named disk_total_bytes to update the on-disk metadata of device, because that variant is updated only when the resize operation is successful. Fix it. Signed-off-by: Miao Xie <[email protected]> Signed-off-by: Chris Mason <[email protected]>
1 parent 5d68da3 commit 7df69d3

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

fs/btrfs/disk-io.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3450,7 +3450,8 @@ static int write_all_supers(struct btrfs_root *root, int max_mirrors)
34503450
btrfs_set_stack_device_generation(dev_item, 0);
34513451
btrfs_set_stack_device_type(dev_item, dev->type);
34523452
btrfs_set_stack_device_id(dev_item, dev->devid);
3453-
btrfs_set_stack_device_total_bytes(dev_item, dev->total_bytes);
3453+
btrfs_set_stack_device_total_bytes(dev_item,
3454+
dev->disk_total_bytes);
34543455
btrfs_set_stack_device_bytes_used(dev_item, dev->bytes_used);
34553456
btrfs_set_stack_device_io_align(dev_item, dev->io_align);
34563457
btrfs_set_stack_device_io_width(dev_item, dev->io_width);

fs/btrfs/volumes.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1483,7 +1483,7 @@ static int btrfs_add_device(struct btrfs_trans_handle *trans,
14831483
btrfs_set_device_io_align(leaf, dev_item, device->io_align);
14841484
btrfs_set_device_io_width(leaf, dev_item, device->io_width);
14851485
btrfs_set_device_sector_size(leaf, dev_item, device->sector_size);
1486-
btrfs_set_device_total_bytes(leaf, dev_item, device->total_bytes);
1486+
btrfs_set_device_total_bytes(leaf, dev_item, device->disk_total_bytes);
14871487
btrfs_set_device_bytes_used(leaf, dev_item, device->bytes_used);
14881488
btrfs_set_device_group(leaf, dev_item, 0);
14891489
btrfs_set_device_seek_speed(leaf, dev_item, 0);

0 commit comments

Comments
 (0)