Skip to content

Commit

Permalink
btrfs: zoned: activate block group properly on unlimited active zone …
Browse files Browse the repository at this point in the history
…device

btrfs_zone_activate() checks if it activated all the underlying zones in
the loop. However, that check never hit on an unlimited activate zone
device (max_active_zones == 0).

Fortunately, it still works without ENOSPC because btrfs_zone_activate()
returns true in the end, even if block_group->zone_is_active == 0. But, it
is confusing to have non zone_is_active block group still usable for
allocation. Also, we are wasting CPU time to iterate the loop every time
btrfs_zone_activate() is called for the blog groups.

Since error case in the loop is handled by out_unlock, we can just set
zone_is_active and do the list stuff after the loop.

Fixes: f9a912a ("btrfs: zoned: make zone activation multi stripe capable")
Reviewed-by: Johannes Thumshirn <[email protected]>
Signed-off-by: Naohiro Aota <[email protected]>
Signed-off-by: David Sterba <[email protected]>
  • Loading branch information
naota authored and kdave committed May 5, 2022
1 parent 5495771 commit ceb4f60
Showing 1 changed file with 8 additions and 14 deletions.
22 changes: 8 additions & 14 deletions fs/btrfs/zoned.c
Original file line number Diff line number Diff line change
Expand Up @@ -1853,24 +1853,18 @@ bool btrfs_zone_activate(struct btrfs_block_group *block_group)
ret = false;
goto out_unlock;
}

/* Successfully activated all the zones */
if (i == map->num_stripes - 1)
block_group->zone_is_active = 1;


}

/* Successfully activated all the zones */
block_group->zone_is_active = 1;
spin_unlock(&block_group->lock);

if (block_group->zone_is_active) {
/* For the active block group list */
btrfs_get_block_group(block_group);
/* For the active block group list */
btrfs_get_block_group(block_group);

spin_lock(&fs_info->zone_active_bgs_lock);
list_add_tail(&block_group->active_bg_list,
&fs_info->zone_active_bgs);
spin_unlock(&fs_info->zone_active_bgs_lock);
}
spin_lock(&fs_info->zone_active_bgs_lock);
list_add_tail(&block_group->active_bg_list, &fs_info->zone_active_bgs);
spin_unlock(&fs_info->zone_active_bgs_lock);

return true;

Expand Down

0 comments on commit ceb4f60

Please sign in to comment.