diff options
| author | Mark Harmstone <mark@harmstone.com> | 2026-04-16 18:15:23 +0100 |
|---|---|---|
| committer | David Sterba <dsterba@suse.com> | 2026-04-21 04:03:08 +0200 |
| commit | 82323b1a7088b7a5c3e528a5d634bff447fa286f (patch) | |
| tree | 4cb48377ddf98b608ee01159b356808d67e5bf5b /include/linux/timerqueue.h | |
| parent | a8d58a7c0200904ff24ca7f0d7c147017e25aa99 (diff) | |
btrfs: fix double-decrement of bytes_may_use in submit_one_async_extent()
submit_one_async_extent() calls btrfs_reserve_extent(), which decrements
bytes_may_use. If the call btrfs_create_io_em() fails, we jump to
out_free_reserve, which calls extent_clear_unlock_delalloc().
Because we're specifying EXTENT_DO_ACCOUNTING, i.e.
EXTENT_CLEAR_META_RESV | EXTENT_CLEAR_DATA_RESV, this decreases
bytes_may_use again. This can lead to problems later on, as an initial
write can fail only for the writeback to silently ENOSPC.
Fix this by replacing EXTENT_DO_ACCOUNTING with EXTENT_CLEAR_META_RESV.
This parallels a4fe134fc1d8eb ("btrfs: fix a double release on reserved
extents in cow_one_range()"), which is the same fix in cow_one_range().
Fixes: 151a41bc46df ("Btrfs: fix what bits we clear when erroring out from delalloc")
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Mark Harmstone <mark@harmstone.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'include/linux/timerqueue.h')
0 files changed, 0 insertions, 0 deletions
