diff options
author | Naohiro Aota <naohiro.aota@wdc.com> | 2023-08-08 01:12:36 +0900 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2023-08-21 14:52:19 +0200 |
commit | a7e1ac7bdc5af91af2d52e6269fdbd92fe9ee353 (patch) | |
tree | 37a66cbd5817818c68f548991360845c30c441c1 /fs/btrfs/disk-io.c | |
parent | c1c3c2bc2917d09bbb19cb9894ba5950254b9502 (diff) | |
download | linux-a7e1ac7bdc5af91af2d52e6269fdbd92fe9ee353.tar.gz linux-a7e1ac7bdc5af91af2d52e6269fdbd92fe9ee353.tar.bz2 linux-a7e1ac7bdc5af91af2d52e6269fdbd92fe9ee353.zip |
btrfs: zoned: reserve zones for an active metadata/system block group
Ensure a metadata and system block group can be activated on write time, by
leaving a certain number of active zones when trying to activate a data
block group.
Zones for two metadata block groups (normal and tree-log) and one system
block group are reserved, according to the profile type: two zones per
block group on the DUP profile and one zone per block group otherwise.
The reservation must be freed once a non-data block group is allocated. If
not, we over-reserve the active zones and data block group activation will
suffer. For the dynamic reservation count, we need to manage the
reservation count per device.
The reservation count variable is protected by
fs_info->zone_active_bgs_lock.
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index a38d3f9a1a03..5022a3fd778d 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -3467,6 +3467,8 @@ int __cold open_ctree(struct super_block *sb, struct btrfs_fs_devices *fs_device btrfs_free_zone_cache(fs_info); + btrfs_check_active_zone_reservation(fs_info); + if (!sb_rdonly(sb) && fs_info->fs_devices->missing_devices && !btrfs_check_rw_degradable(fs_info, NULL)) { btrfs_warn(fs_info, |