Re: [PATCH v8 1/1] ocfs2: split transactions in dio completion to avoid credit exhaustion

From: Joseph Qi

Date: Mon Apr 06 2026 - 23:05:03 EST




On 4/4/26 3:32 AM, Andrew Morton wrote:
> On Thu, 2 Apr 2026 21:43:27 +0800 Heming Zhao <heming.zhao@xxxxxxxx> wrote:
>
>> During ocfs2 dio operations, JBD2 may report warnings via following
>> call trace:
>> ocfs2_dio_end_io_write
>> ocfs2_mark_extent_written
>> ocfs2_change_extent_flag
>> ocfs2_split_extent
>> ocfs2_try_to_merge_extent
>> ocfs2_extend_rotate_transaction
>> ocfs2_extend_trans
>> jbd2__journal_restart
>> start_this_handle
>> output: JBD2: kworker/6:2 wants too many credits credits:5450 rsv_credits:0 max:5449
>>
>> To prevent exceeding the credits limit, modify ocfs2_dio_end_io_write() to
>> handle extents in a batch of transaction.
>>
>> Additionally, relocate ocfs2_del_inode_from_orphan(). The orphan inode should
>> only be removed from the orphan list after the extent tree update is complete.
>> This ensures that if a crash occurs in the middle of extent tree updates, we
>> won't leave stale blocks beyond EOF.
>>
>> This patch also changes the logic for updating the inode size and removing
>> orphan, making it similar to ext4_dio_write_end_io(). Both operations are
>> performed only when everything looks good.
>>
>> Finally, thanks to Jans and Joseph for providing the bug fix prototype and
>> suggestions.
>
> AI review has a question:
> https://sashiko.dev/#/patchset/20260402134328.27334-2-heming.zhao@xxxxxxxx

There are two paths to recover:
1. During next write to the same file, ocfs2_add_inode_to_orphan() will
manually recover it first.
2. During next mount or node recover, ocfs2_recover_orphans() will also
do the same recovery operations (truncate + delete from orphan).

So I think it is false positive report.

Thanks,
Joseph