Skip to content

Commit c9ff839

Browse files
morbidrsakdave
authored andcommitted
btrfs: zoned: don't fail mount needlessly due to too many active zones
Previously BTRFS did not look at a device's reported max_open_zones limit, but starting with commit 04147d8 ("btrfs: zoned: limit active zones to max_open_zones"), zoned BTRFS limited the number of concurrently used block-groups to the number of max_open_zones a device reported, if it hadn't already reported a number of max_active_zones. Starting with commit 04147d8 the number of open zones is treated the same way as active zones. But this leads to mount failures on filesystems which have been used before 04147d8 because too many zones are in an open state. Ignore the new limitations on these filesystems, so zones can be finished or evacuated. Reported-by: Yuwei Han <hrx@bupt.moe> Link: https://lore.kernel.org/all/2F48A90AF7DDF380+1790bcfd-cb6f-456b-870d-7982f21b5eae@bupt.moe/ Fixes: 04147d8 ("btrfs: zoned: limit active zones to max_open_zones") Reviewed-by: Naohiro Aota <naohiro.aota@wdc.com> Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent f08d714 commit c9ff839

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

fs/btrfs/zoned.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,11 @@ int btrfs_get_dev_zone_info(struct btrfs_device *device, bool populate_cache)
514514

515515
if (max_active_zones) {
516516
if (nactive > max_active_zones) {
517+
if (bdev_max_active_zones(bdev) == 0) {
518+
max_active_zones = 0;
519+
zone_info->max_active_zones = 0;
520+
goto validate;
521+
}
517522
btrfs_err(device->fs_info,
518523
"zoned: %u active zones on %s exceeds max_active_zones %u",
519524
nactive, rcu_dereference(device->name),
@@ -526,6 +531,7 @@ int btrfs_get_dev_zone_info(struct btrfs_device *device, bool populate_cache)
526531
set_bit(BTRFS_FS_ACTIVE_ZONE_TRACKING, &fs_info->flags);
527532
}
528533

534+
validate:
529535
/* Validate superblock log */
530536
nr_zones = BTRFS_NR_SB_LOG_ZONES;
531537
for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {

0 commit comments

Comments
 (0)