Commit e15acc25 authored by Naohiro Aota's avatar Naohiro Aota Committed by David Sterba

btrfs: zoned: drop space_info->active_total_bytes

The space_info->active_total_bytes is no longer necessary as we now
count the region of newly allocated block group as zone_unusable. Drop
its usage.

Fixes: 6a921de5 ("btrfs: zoned: introduce space_info->active_total_bytes")
CC: stable@vger.kernel.org # 6.1+
Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent fa2068d7
...@@ -1175,14 +1175,8 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, ...@@ -1175,14 +1175,8 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
< block_group->zone_unusable); < block_group->zone_unusable);
WARN_ON(block_group->space_info->disk_total WARN_ON(block_group->space_info->disk_total
< block_group->length * factor); < block_group->length * factor);
WARN_ON(test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE,
&block_group->runtime_flags) &&
block_group->space_info->active_total_bytes
< block_group->length);
} }
block_group->space_info->total_bytes -= block_group->length; block_group->space_info->total_bytes -= block_group->length;
if (test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags))
block_group->space_info->active_total_bytes -= block_group->length;
block_group->space_info->bytes_readonly -= block_group->space_info->bytes_readonly -=
(block_group->length - block_group->zone_unusable); (block_group->length - block_group->zone_unusable);
block_group->space_info->bytes_zone_unusable -= block_group->space_info->bytes_zone_unusable -=
......
...@@ -308,8 +308,6 @@ void btrfs_add_bg_to_space_info(struct btrfs_fs_info *info, ...@@ -308,8 +308,6 @@ void btrfs_add_bg_to_space_info(struct btrfs_fs_info *info,
ASSERT(found); ASSERT(found);
spin_lock(&found->lock); spin_lock(&found->lock);
found->total_bytes += block_group->length; found->total_bytes += block_group->length;
if (test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags))
found->active_total_bytes += block_group->length;
found->disk_total += block_group->length * factor; found->disk_total += block_group->length * factor;
found->bytes_used += block_group->used; found->bytes_used += block_group->used;
found->disk_used += block_group->used * factor; found->disk_used += block_group->used * factor;
...@@ -379,22 +377,6 @@ static u64 calc_available_free_space(struct btrfs_fs_info *fs_info, ...@@ -379,22 +377,6 @@ static u64 calc_available_free_space(struct btrfs_fs_info *fs_info,
return avail; return avail;
} }
static inline u64 writable_total_bytes(struct btrfs_fs_info *fs_info,
struct btrfs_space_info *space_info)
{
/*
* On regular filesystem, all total_bytes are always writable. On zoned
* filesystem, there may be a limitation imposed by max_active_zones.
* For metadata allocation, we cannot finish an existing active block
* group to avoid a deadlock. Thus, we need to consider only the active
* groups to be writable for metadata space.
*/
if (!btrfs_is_zoned(fs_info) || (space_info->flags & BTRFS_BLOCK_GROUP_DATA))
return space_info->total_bytes;
return space_info->active_total_bytes;
}
int btrfs_can_overcommit(struct btrfs_fs_info *fs_info, int btrfs_can_overcommit(struct btrfs_fs_info *fs_info,
struct btrfs_space_info *space_info, u64 bytes, struct btrfs_space_info *space_info, u64 bytes,
enum btrfs_reserve_flush_enum flush) enum btrfs_reserve_flush_enum flush)
...@@ -413,7 +395,7 @@ int btrfs_can_overcommit(struct btrfs_fs_info *fs_info, ...@@ -413,7 +395,7 @@ int btrfs_can_overcommit(struct btrfs_fs_info *fs_info,
else else
avail = calc_available_free_space(fs_info, space_info, flush); avail = calc_available_free_space(fs_info, space_info, flush);
if (used + bytes < writable_total_bytes(fs_info, space_info) + avail) if (used + bytes < space_info->total_bytes + avail)
return 1; return 1;
return 0; return 0;
} }
...@@ -449,7 +431,7 @@ void btrfs_try_granting_tickets(struct btrfs_fs_info *fs_info, ...@@ -449,7 +431,7 @@ void btrfs_try_granting_tickets(struct btrfs_fs_info *fs_info,
ticket = list_first_entry(head, struct reserve_ticket, list); ticket = list_first_entry(head, struct reserve_ticket, list);
/* Check and see if our ticket can be satisfied now. */ /* Check and see if our ticket can be satisfied now. */
if ((used + ticket->bytes <= writable_total_bytes(fs_info, space_info)) || if ((used + ticket->bytes <= space_info->total_bytes) ||
btrfs_can_overcommit(fs_info, space_info, ticket->bytes, btrfs_can_overcommit(fs_info, space_info, ticket->bytes,
flush)) { flush)) {
btrfs_space_info_update_bytes_may_use(fs_info, btrfs_space_info_update_bytes_may_use(fs_info,
...@@ -829,7 +811,6 @@ btrfs_calc_reclaim_metadata_size(struct btrfs_fs_info *fs_info, ...@@ -829,7 +811,6 @@ btrfs_calc_reclaim_metadata_size(struct btrfs_fs_info *fs_info,
{ {
u64 used; u64 used;
u64 avail; u64 avail;
u64 total;
u64 to_reclaim = space_info->reclaim_size; u64 to_reclaim = space_info->reclaim_size;
lockdep_assert_held(&space_info->lock); lockdep_assert_held(&space_info->lock);
...@@ -844,9 +825,8 @@ btrfs_calc_reclaim_metadata_size(struct btrfs_fs_info *fs_info, ...@@ -844,9 +825,8 @@ btrfs_calc_reclaim_metadata_size(struct btrfs_fs_info *fs_info,
* space. If that's the case add in our overage so we make sure to put * space. If that's the case add in our overage so we make sure to put
* appropriate pressure on the flushing state machine. * appropriate pressure on the flushing state machine.
*/ */
total = writable_total_bytes(fs_info, space_info); if (space_info->total_bytes + avail < used)
if (total + avail < used) to_reclaim += used - (space_info->total_bytes + avail);
to_reclaim += used - (total + avail);
return to_reclaim; return to_reclaim;
} }
...@@ -856,11 +836,10 @@ static bool need_preemptive_reclaim(struct btrfs_fs_info *fs_info, ...@@ -856,11 +836,10 @@ static bool need_preemptive_reclaim(struct btrfs_fs_info *fs_info,
{ {
u64 global_rsv_size = fs_info->global_block_rsv.reserved; u64 global_rsv_size = fs_info->global_block_rsv.reserved;
u64 ordered, delalloc; u64 ordered, delalloc;
u64 total = writable_total_bytes(fs_info, space_info);
u64 thresh; u64 thresh;
u64 used; u64 used;
thresh = mult_perc(total, 90); thresh = mult_perc(space_info->total_bytes, 90);
lockdep_assert_held(&space_info->lock); lockdep_assert_held(&space_info->lock);
...@@ -923,8 +902,8 @@ static bool need_preemptive_reclaim(struct btrfs_fs_info *fs_info, ...@@ -923,8 +902,8 @@ static bool need_preemptive_reclaim(struct btrfs_fs_info *fs_info,
BTRFS_RESERVE_FLUSH_ALL); BTRFS_RESERVE_FLUSH_ALL);
used = space_info->bytes_used + space_info->bytes_reserved + used = space_info->bytes_used + space_info->bytes_reserved +
space_info->bytes_readonly + global_rsv_size; space_info->bytes_readonly + global_rsv_size;
if (used < total) if (used < space_info->total_bytes)
thresh += total - used; thresh += space_info->total_bytes - used;
thresh >>= space_info->clamp; thresh >>= space_info->clamp;
used = space_info->bytes_pinned; used = space_info->bytes_pinned;
...@@ -1651,7 +1630,7 @@ static int __reserve_bytes(struct btrfs_fs_info *fs_info, ...@@ -1651,7 +1630,7 @@ static int __reserve_bytes(struct btrfs_fs_info *fs_info,
* can_overcommit() to ensure we can overcommit to continue. * can_overcommit() to ensure we can overcommit to continue.
*/ */
if (!pending_tickets && if (!pending_tickets &&
((used + orig_bytes <= writable_total_bytes(fs_info, space_info)) || ((used + orig_bytes <= space_info->total_bytes) ||
btrfs_can_overcommit(fs_info, space_info, orig_bytes, flush))) { btrfs_can_overcommit(fs_info, space_info, orig_bytes, flush))) {
btrfs_space_info_update_bytes_may_use(fs_info, space_info, btrfs_space_info_update_bytes_may_use(fs_info, space_info,
orig_bytes); orig_bytes);
...@@ -1665,8 +1644,7 @@ static int __reserve_bytes(struct btrfs_fs_info *fs_info, ...@@ -1665,8 +1644,7 @@ static int __reserve_bytes(struct btrfs_fs_info *fs_info,
*/ */
if (ret && unlikely(flush == BTRFS_RESERVE_FLUSH_EMERGENCY)) { if (ret && unlikely(flush == BTRFS_RESERVE_FLUSH_EMERGENCY)) {
used = btrfs_space_info_used(space_info, false); used = btrfs_space_info_used(space_info, false);
if (used + orig_bytes <= if (used + orig_bytes <= space_info->total_bytes) {
writable_total_bytes(fs_info, space_info)) {
btrfs_space_info_update_bytes_may_use(fs_info, space_info, btrfs_space_info_update_bytes_may_use(fs_info, space_info,
orig_bytes); orig_bytes);
ret = 0; ret = 0;
......
...@@ -96,8 +96,6 @@ struct btrfs_space_info { ...@@ -96,8 +96,6 @@ struct btrfs_space_info {
u64 bytes_may_use; /* number of bytes that may be used for u64 bytes_may_use; /* number of bytes that may be used for
delalloc/allocations */ delalloc/allocations */
u64 bytes_readonly; /* total bytes that are read only */ u64 bytes_readonly; /* total bytes that are read only */
/* Total bytes in the space, but only accounts active block groups. */
u64 active_total_bytes;
u64 bytes_zone_unusable; /* total bytes that are unusable until u64 bytes_zone_unusable; /* total bytes that are unusable until
resetting the device zone */ resetting the device zone */
......
...@@ -2316,10 +2316,6 @@ int btrfs_zoned_activate_one_bg(struct btrfs_fs_info *fs_info, ...@@ -2316,10 +2316,6 @@ int btrfs_zoned_activate_one_bg(struct btrfs_fs_info *fs_info,
if (!btrfs_is_zoned(fs_info) || (space_info->flags & BTRFS_BLOCK_GROUP_DATA)) if (!btrfs_is_zoned(fs_info) || (space_info->flags & BTRFS_BLOCK_GROUP_DATA))
return 0; return 0;
/* No more block groups to activate */
if (space_info->active_total_bytes == space_info->total_bytes)
return 0;
for (;;) { for (;;) {
int ret; int ret;
bool need_finish = false; bool need_finish = false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment