All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: Zhang Yi <yi.zhang@huaweicloud.com>
Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org,
	stable@vger.kernel.org, tytso@mit.edu
Subject: Re: [PATCH] ext4: fix JBD2 credit overflow with large folios
Date: Mon, 30 Jun 2025 11:01:41 -0400	[thread overview]
Message-ID: <aGKm1W71BP636aWd@lappy> (raw)
In-Reply-To: <0d7b0731-88c3-4114-a401-e6aa8a085c5f@huaweicloud.com>

On Mon, Jun 30, 2025 at 09:58:52PM +0800, Zhang Yi wrote:
>On 2025/6/30 21:13, Sasha Levin wrote:
>> When large folios are enabled, the blocks-per-folio calculation in
>> ext4_da_writepages_trans_blocks() can overflow the journal transaction
>> limits, causing the writeback path to fail with errors like:
>>
>>   JBD2: kworker/u8:0 wants too many credits credits:416 rsv_credits:21 max:334
>>
>> This occurs with small block sizes (1KB) and large folios (32MB), where
>> the calculation results in 32768 blocks per folio. The transaction credit
>> calculation then requests more credits than the journal can handle, leading
>> to the following warning and writeback failure:
>>
>>   WARNING: CPU: 1 PID: 43 at fs/jbd2/transaction.c:334 start_this_handle+0x4c0/0x4e0
>>   EXT4-fs (loop0): ext4_do_writepages: jbd2_start: 9223372036854775807 pages, ino 14; err -28
>>
>> Call trace leading to the issue:
>>   ext4_do_writepages()
>>     ext4_da_writepages_trans_blocks()
>>       bpp = ext4_journal_blocks_per_folio() // Returns 32768 for 32MB folio with 1KB blocks
>>       ext4_meta_trans_blocks(inode, MAX_WRITEPAGES_EXTENT_LEN + bpp - 1, bpp)
>>         // With bpp=32768, lblocks=34815, pextents=32768
>>         // Returns credits=415, but with overhead becomes 416 > max 334
>>     ext4_journal_start_with_reserve()
>>       jbd2_journal_start_reserved()
>>         start_this_handle()
>>           // Fails with warning when credits:416 > max:334
>>
>> The issue was introduced by commit d6bf294773a47 ("ext4/jbd2: convert
>> jbd2_journal_blocks_per_page() to support large folio"), which added
>> support for large folios but didn't account for the journal credit limits.
>>
>> Fix this by capping the blocks-per-folio value at 8192 in the writeback
>> path. This is the value we'd get with 32MB folios and 4KB blocks, or 8MB
>> folios with 1KB blocks, which is reasonable and safe for typical journal
>> configurations.
>>
>> Fixes: d6bf294773a4 ("ext4/jbd2: convert jbd2_journal_blocks_per_page() to support large folio")
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Sasha Levin <sashal@kernel.org>
>
>Hi, Sasha!
>
>Thank you for the fix. However, simply limiting the credits is not enough,
>as this may result in a scenario where there are not enough credits
>available to map a large, non-contiguous folio. I've been working on this
>issue[1] and I'll release v3 tomorrow if my tests looks fine.
>
>[1] https://lore.kernel.org/linux-ext4/20250611111625.1668035-1-yi.zhang@huaweicloud.com/

Ah perfect, I haven't seen your work, thank you for that.

Please ignore my patch.

-- 
Thanks,
Sasha

      reply	other threads:[~2025-06-30 15:01 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-30 13:13 [PATCH] ext4: fix JBD2 credit overflow with large folios Sasha Levin
2025-06-30 13:58 ` Zhang Yi
2025-06-30 15:01   ` Sasha Levin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aGKm1W71BP636aWd@lappy \
    --to=sashal@kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=tytso@mit.edu \
    --cc=yi.zhang@huaweicloud.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.