From: Eric Biggers via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net>
To: Vlastimil Babka <vbabka@suse.cz>
Cc: "Vernon Yang" <vernon2gm@gmail.com>,
"Theodore Y. Ts'o" <tytso@mit.edu>,
roman.gushchin@linux.dev, linux-kernel@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
"Christoph Hellwig" <hch@infradead.org>,
linux-mm@kvack.org, linux-fscrypt@vger.kernel.org,
syzkaller@googlegroups.com, "Harry Yoo" <harry.yoo@oracle.com>,
cl@gentwo.org, rientjes@google.com,
"Jaegeuk Kim" <jaegeuk@kernel.org>,
akpm@linux-foundation.org, 李龙兴 <coregee2000@gmail.com>
Subject: Re: [f2fs-dev] [Kernel Bug] WARNING in mempool_alloc_noprof
Date: Tue, 3 Feb 2026 23:01:24 +0000 [thread overview]
Message-ID: <20260203230124.GA1161785@google.com> (raw)
In-Reply-To: <d9dc2ee1-283d-4467-ad36-a6a4aa557589@suse.cz>
On Tue, Feb 03, 2026 at 07:30:07PM +0100, Vlastimil Babka wrote:
> On 2/3/26 17:59, Christoph Hellwig wrote:
> > On Tue, Feb 03, 2026 at 05:55:27PM +0100, Vlastimil Babka wrote:
> >> On 2/3/26 17:27, Christoph Hellwig wrote:
> >> > On Tue, Feb 03, 2026 at 06:52:39PM +0900, Harry Yoo wrote:
> >> >> Maybe the changelog could be rephrased a bit,
> >> >> but overall LGTM, thanks!
> >> >
> >> >
> >> > No, that does not make sense. If mempool is used with __GFP_RECLAIM in
> >> > the flags it won't fail, and if it isn't, GFP_NOFAIL can't work.
> >>
> >> So that means as long as there's __GFP_RECLAIM, __GFP_NOFAIL isn't wrong,
> >> just redundant.
> >
> > Given how picky the rest of the mm is about __GFP_NOFAIL, silently
> > accepting it where it has no (or a weird and unexpected) effect
> > seems like a disservice to the users.
>
> OK then. But I don't think we need to add checks to the mempool hot paths.
> If somebody uses __GFP_NOFAIL, eventually it will trickle to the existing
> warning that triggered here. If it's using slab then eventually that will
> reach the page allocator too. Maybe not with some custom alloc functions,
> but meh.
>
> This f2fs_encrypt_one_page() case is weird though (and the relevant parts
> seem to be identical in current mainline).
> It uses GFP_NOFS, so __GFP_RECLAIM is there. It only adds __GFP_NOFAIL in
> case fscrypt_encrypt_pagecache_blocks() already failed with -ENOMEM.
>
> That means fscrypt_alloc_bounce_page() returns NULL, which is either the
> WARN_ON_ONCE(!fscrypt_bounce_page_pool) case (but the report doesn't include
> such a warning), or mempool_alloc() failed - but that shouldn't happen with
> GFP_NOFS?
>
> (Also the !fscrypt_bounce_page_pool is therefore an infinite retry loop,
> isn't it? Which would be truly a bug, unless I'm missing something.)
>
> Ah but fscrypt_encrypt_pagecache_blocks() can also return -ENOMEM due to
> fscrypt_crypt_data_unit() returning it.
>
> And there theoretically in v6.12.11 skcipher_request_alloc() could return
> -ENOMEM. In practice I assume this report was achieved by fault injection.
> But that possibility is gone with mainline commit 52e7e0d88933 ("fscrypt:
> Switch to sync_skcipher and on-stack requests") anyway.
>
> I think the whole "goto retry_encrypt;" loop in f2fs_encrypt_one_page()
> should just be removed.
Indeed, fscrypt_encrypt_pagecache_blocks() (or the older code it was
derived from) used to do multiple memory allocations. Now it only
allocates the bounce page itself.
Also, the intended usage is what ext4 does: use GFP_NOFS for the first
page in the bio for a guaranteed allocation from the mempool, then
GFP_NOWAIT for any subsequent pages. If any of the subsequent
allocations fails, ext4 submits the bio early and starts a new one.
f2fs does it differently and just always uses GFP_NOFS. Yes, that
doesn't make sense. I guess ideally it would be changed to properly do
opportunistic allocations in the same way as ext4. But until then, just
removing the retry loop sounds good.
- Eric
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: Eric Biggers <ebiggers@kernel.org>
To: Vlastimil Babka <vbabka@suse.cz>
Cc: "Christoph Hellwig" <hch@infradead.org>,
"Harry Yoo" <harry.yoo@oracle.com>,
"Vernon Yang" <vernon2gm@gmail.com>, 李龙兴 <coregee2000@gmail.com>,
syzkaller@googlegroups.com, akpm@linux-foundation.org,
cl@gentwo.org, rientjes@google.com, roman.gushchin@linux.dev,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
"Jaegeuk Kim" <jaegeuk@kernel.org>, "Chao Yu" <chao@kernel.org>,
linux-f2fs-devel@lists.sourceforge.net,
"Theodore Y. Ts'o" <tytso@mit.edu>,
linux-fscrypt@vger.kernel.org
Subject: Re: [Kernel Bug] WARNING in mempool_alloc_noprof
Date: Tue, 3 Feb 2026 23:01:24 +0000 [thread overview]
Message-ID: <20260203230124.GA1161785@google.com> (raw)
In-Reply-To: <d9dc2ee1-283d-4467-ad36-a6a4aa557589@suse.cz>
On Tue, Feb 03, 2026 at 07:30:07PM +0100, Vlastimil Babka wrote:
> On 2/3/26 17:59, Christoph Hellwig wrote:
> > On Tue, Feb 03, 2026 at 05:55:27PM +0100, Vlastimil Babka wrote:
> >> On 2/3/26 17:27, Christoph Hellwig wrote:
> >> > On Tue, Feb 03, 2026 at 06:52:39PM +0900, Harry Yoo wrote:
> >> >> Maybe the changelog could be rephrased a bit,
> >> >> but overall LGTM, thanks!
> >> >
> >> >
> >> > No, that does not make sense. If mempool is used with __GFP_RECLAIM in
> >> > the flags it won't fail, and if it isn't, GFP_NOFAIL can't work.
> >>
> >> So that means as long as there's __GFP_RECLAIM, __GFP_NOFAIL isn't wrong,
> >> just redundant.
> >
> > Given how picky the rest of the mm is about __GFP_NOFAIL, silently
> > accepting it where it has no (or a weird and unexpected) effect
> > seems like a disservice to the users.
>
> OK then. But I don't think we need to add checks to the mempool hot paths.
> If somebody uses __GFP_NOFAIL, eventually it will trickle to the existing
> warning that triggered here. If it's using slab then eventually that will
> reach the page allocator too. Maybe not with some custom alloc functions,
> but meh.
>
> This f2fs_encrypt_one_page() case is weird though (and the relevant parts
> seem to be identical in current mainline).
> It uses GFP_NOFS, so __GFP_RECLAIM is there. It only adds __GFP_NOFAIL in
> case fscrypt_encrypt_pagecache_blocks() already failed with -ENOMEM.
>
> That means fscrypt_alloc_bounce_page() returns NULL, which is either the
> WARN_ON_ONCE(!fscrypt_bounce_page_pool) case (but the report doesn't include
> such a warning), or mempool_alloc() failed - but that shouldn't happen with
> GFP_NOFS?
>
> (Also the !fscrypt_bounce_page_pool is therefore an infinite retry loop,
> isn't it? Which would be truly a bug, unless I'm missing something.)
>
> Ah but fscrypt_encrypt_pagecache_blocks() can also return -ENOMEM due to
> fscrypt_crypt_data_unit() returning it.
>
> And there theoretically in v6.12.11 skcipher_request_alloc() could return
> -ENOMEM. In practice I assume this report was achieved by fault injection.
> But that possibility is gone with mainline commit 52e7e0d88933 ("fscrypt:
> Switch to sync_skcipher and on-stack requests") anyway.
>
> I think the whole "goto retry_encrypt;" loop in f2fs_encrypt_one_page()
> should just be removed.
Indeed, fscrypt_encrypt_pagecache_blocks() (or the older code it was
derived from) used to do multiple memory allocations. Now it only
allocates the bounce page itself.
Also, the intended usage is what ext4 does: use GFP_NOFS for the first
page in the bio for a guaranteed allocation from the mempool, then
GFP_NOWAIT for any subsequent pages. If any of the subsequent
allocations fails, ext4 submits the bio early and starts a new one.
f2fs does it differently and just always uses GFP_NOFS. Yes, that
doesn't make sense. I guess ideally it would be changed to properly do
opportunistic allocations in the same way as ext4. But until then, just
removing the retry loop sounds good.
- Eric
next prev parent reply other threads:[~2026-02-03 23:01 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-02 6:40 [Kernel Bug] WARNING in mempool_alloc_noprof 李龙兴
2026-02-02 8:39 ` Harry Yoo
2026-02-03 3:47 ` Vernon Yang
2026-02-03 9:52 ` Harry Yoo
2026-02-03 16:27 ` Christoph Hellwig
2026-02-03 16:55 ` Vlastimil Babka
2026-02-03 16:59 ` Christoph Hellwig
2026-02-03 18:30 ` [f2fs-dev] " Vlastimil Babka
2026-02-03 18:30 ` Vlastimil Babka
2026-02-03 23:01 ` Eric Biggers via Linux-f2fs-devel [this message]
2026-02-03 23:01 ` Eric Biggers
2026-02-03 6:44 ` Lance Yang
2026-02-03 8:44 ` Vlastimil Babka
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=20260203230124.GA1161785@google.com \
--to=linux-f2fs-devel@lists.sourceforge.net \
--cc=akpm@linux-foundation.org \
--cc=cl@gentwo.org \
--cc=coregee2000@gmail.com \
--cc=ebiggers@kernel.org \
--cc=harry.yoo@oracle.com \
--cc=hch@infradead.org \
--cc=jaegeuk@kernel.org \
--cc=linux-fscrypt@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=syzkaller@googlegroups.com \
--cc=tytso@mit.edu \
--cc=vbabka@suse.cz \
--cc=vernon2gm@gmail.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.