Files
linux/fs
Naohiro Aota b9fd2affe4 btrfs: zoned: fix initial free space detection
When creating a new block group, it calls btrfs_add_new_free_space() to add
the entire block group range into the free space accounting.
__btrfs_add_free_space_zoned() checks if size == block_group->length to
detect the initial free space adding, and proceed that case properly.

However, if the zone_capacity == zone_size and the over-write speed is fast
enough, the entire zone can be over-written within one transaction. That
confuses __btrfs_add_free_space_zoned() to handle it as an initial free
space accounting. As a result, that block group becomes a strange state: 0
used bytes, 0 zone_unusable bytes, but alloc_offset == zone_capacity (no
allocation anymore).

The initial free space accounting can properly be checked by checking
alloc_offset too.

Fixes: 98173255bd ("btrfs: zoned: calculate free space from zone capacity")
CC: stable@vger.kernel.org # 6.1+
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2024-06-25 00:33:57 +02:00
..
2024-04-22 15:34:27 +00:00
2024-03-27 13:17:15 +01:00
2024-03-27 13:17:15 +01:00
2024-03-27 13:17:15 +01:00
2023-12-29 11:58:34 -08:00
2024-03-27 13:17:15 +01:00
2024-03-27 13:17:15 +01:00
2024-03-27 13:17:15 +01:00
2024-03-06 10:52:12 +01:00
2023-12-12 14:24:14 +01:00
2024-03-13 12:53:53 -07:00
2024-03-13 12:53:53 -07:00
2024-03-13 12:53:53 -07:00
2024-03-13 12:53:53 -07:00
2024-02-02 13:11:49 +01:00
2024-03-27 13:17:15 +01:00
2024-02-15 23:43:47 -05:00