Re: [PATCH v2 0/4] btrfs: btrfs: fix possible race between error handling and writeback

Qu Wenruo
2025-08-18T21:47:35Z

在 2025/8/19 01:18, David Sterba 写道:
> On Mon, Jul 28, 2025 at 05:57:53PM +0930, Qu Wenruo wrote:
>> [CHANGELOG]
>> v2:
>> - Add a new patch to explain the error handling better
>> This makes the later nocow_one_range() error handling change easier to explain.
>>
>> There are some rare kernel warning for experimental btrfs builds that
>> the DEBUG_WARN() can be triggered from btrfs_writepage_cow_fixup(),
>> mostly after some delalloc range failure.
>>
>> The root cause is explained the the last patch, the TL;DR is we
>> shouldn't call btrfs_cleanup_ordered_extents() on folios that are
>> already unlocked.
>>
>> Those unlocked folios can be under writeback, and if we cleared the
>> order flag just before the writeback thread entering
>> btrfs_writepage_cow_fixup(), we will trigger the warning.
>>
>> The first patch enhance the error handling of run_delalloc_nocow(), with
>> proper comments and charts explaining the cleanup range.
>>
>> The second patch is a small enhancement to the error messages, which
>> helps debugging.
>>
>> The third patch is to make nocow_one_range() to do proper cleanup,
>> aligning itself to cow_file_range().
>>
>> The last one is to fix the race window by keep folios of successful
>> ranges locked, so that we either unlock them manually at the end of
>> run_delalloc_nocow(), or get btrfs_cleanup_ordered_extents() called on
>> locked folios for error handling.
>>
>>
>> Qu Wenruo (4):
>> btrfs: rework the error handling of run_delalloc_nocow()
>> btrfs: enhance error messages for delalloc range failure
>> btrfs: make nocow_one_range() to do cleanup on error
>> btrfs: keep folios locked inside run_delalloc_nocow()
>
> The patches have been in linux-next for some time, feel free to add them
> to for-next proper so they can be merged. Related to that, you can
> remove the cow fixup code in this development cycle if you want.
>

Unfortunately even with this series applies, I'm still hitting COW fixup
warning at a very low chance for g/475.

So I'm afraid we're not yet done about all the possible error paths,
thus no removal of cow fixup yet.

Thanks,
Qu