Re: [PATCH v2 0/4] allocate extent_buffer GFP_NOFAIL with unlocked retry

Qu Wenruo <[email protected]> Fri, 24 Jul 2026 08:06:24 +0930
Newsgroups org.kernel.vger.linux-btrfs
Message-ID <[email protected]>

在 2026/7/24 03:58, Boris Burkov 写道:
> On Thu, Jul 23, 2026 at 04:58:57AM +0200, David Sterba wrote:
>> On Tue, Jul 21, 2026 at 03:42:11PM -0700, Boris Burkov wrote:
>>> >From sampled fleet data measuring lock holders that go into direct
>>> reclaim with a waiter present when they eventually unlock, we have
>>> observed ~15% of those are btrfs extent_buffer allocations in
>>> btrfs_search_slot() done while holding btree locks. This is the single
>>> largest category. Additionally, a large source of hung_task timeouts is
>>> both btree waiters and direct reclaiming btree allocations, which
>>> further motivates the desire to drive down this source of stalls and
>>> contention.
>>>
>>> The aim of this series is to allow us to allocate the extent_buffer,
>>> btrfs_folio_state, and the extent_buffer folios with GFP_NOWAIT then
>>> fallback with EAGAIN to outside the critical section to retry with
>>> GFP_NOFS | GFP_NOFAIL without any locks held.
>>>
>>> This is analogous to how we must drop locks to read an extent_buffer and
>>> then EAGAIN.
>>>
>>> The series does not manage to completely eliminate allocations from this
>>> lock holding path, as we also allocate inside xarray functions for the
>>> extent_buffer xarray and the btree_inode mapping xarray, the latter of
>>> which is done via filemap_add_folio() with no reserve type API. Luckily,
>>> those particular allocations are small cached slab allocations and have
>>> nearly no contribution to the production reclaim fueled contention.
>>>
>>> Changelog:
>>> v2:
>>> - rebase
>>> - dropped the inhibit array allocation patch
>>
>> Reviewed-by: David Sterba <[email protected]>
>>
>> The logic makes sense to avoid the stalls. There's no sashiko review
>> because the patches did not apply. You may want to resend a rebased
>> version to see if I have missed something, there are minor typos or
>> style things but that can be fixed during merge.
> 
> Hmm, interesting. I rebased on the btrfs
> ([email protected]:btrfs/linux.git) for-next branch before resending, and
> it just rebased cleanly, and I was able to 'b4 shazam' this version onto
> for-next as well.
> 
> Am I messing up and using the wrong branch? Is sashiko?
> 

It is definitely sashiko, the base seems to be updated infrequently so 
that sometimes it didn't properly get the refreshed base and failed to 
apply.