diff options
author | 2021-12-08 00:35:47 +0900 | |
---|---|---|
committer | 2022-01-07 14:18:26 +0100 | |
commit | 1ada69f61c88abb75a1038ee457633325658a183 (patch) | |
tree | 9a07f20fc40f8a7293664c088ba35373699e4fa1 /tools/perf/scripts/python/export-to-postgresql.py | |
parent | btrfs: zoned: drop redundant check for REQ_OP_ZONE_APPEND and btrfs_is_zoned (diff) | |
download | wireguard-linux-1ada69f61c88abb75a1038ee457633325658a183.tar.xz wireguard-linux-1ada69f61c88abb75a1038ee457633325658a183.zip |
btrfs: zoned: unset dedicated block group on allocation failure
Allocating an extent from a block group can fail for various reasons.
When an allocation from a dedicated block group (for tree-log or
relocation data) fails, we need to unregister it as a dedicated one so
that we can allocate a new block group for the dedicated one.
However, we are returning early when the block group in case it is
read-only, fully used, or not be able to activate the zone. As a result,
we keep the non-usable block group as a dedicated one, leading to
further allocation failure. With many block groups, the allocator will
iterate hopeless loop to find a free extent, results in a hung task.
Fix the issue by delaying the return and doing the proper cleanups.
CC: stable@vger.kernel.org # 5.16
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'tools/perf/scripts/python/export-to-postgresql.py')
0 files changed, 0 insertions, 0 deletions