]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
block: do not warn when doing greedy allocation in folio_alloc_greedy()
authorQu Wenruo <wqu@suse.com>
Tue, 14 Jul 2026 09:07:39 +0000 (18:37 +0930)
committerJens Axboe <axboe@kernel.dk>
Wed, 15 Jul 2026 22:33:29 +0000 (16:33 -0600)
During one of my local btrfs fstests runs, folio_alloc() inside
folio_alloc_greedy() triggered an allocation failure report when trying
to allocate an order-4 folio.

The kernel is from the latest development branch, which is utilizing
the IOMAP_DIO_BOUNCE flag for direct writes when the inode requires
checksum.

Unfortunately I didn't save the full log, only the function and the
order.

When the IOMAP_DIO_BOUNCE flag is utilized, we will hit the following call
chain:

 bio_iov_iter_bounce_write()
 |- folio_alloc_greedy()
    |- folio_alloc(gfp | __GFP_NORETRY, get_order(*size));

However __GFP_NORETRY will still emit an allocation failure report
when it fails.

And folio_alloc_greedy() will retry with a smaller order anyway, there
is no point in emitting that allocation failure report.

Append the __GFP_NOWARN flag to folio_alloc() for the larger-order folio
attempts.

Fixes: 8dd5e7c75d7b ("block: add helpers to bounce buffer an iov_iter into bios")
Signed-off-by: Qu Wenruo <wqu@suse.com>
Link: https://patch.msgid.link/d10571445ee505d95ba6eaad7558fc1f556d2921.1784020005.git.wqu@suse.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bio.c

index f2a5f4d0a9672b622be37a05d78497880c86cd52..5ac954c70dd0153d5052d49d8efaa82ed951462e 100644 (file)
@@ -1285,7 +1285,8 @@ static struct folio *folio_alloc_greedy(gfp_t gfp, size_t *size,
        struct folio *folio;
 
        while (*size > minsize) {
-               folio = folio_alloc(gfp | __GFP_NORETRY, get_order(*size));
+               folio = folio_alloc(gfp | __GFP_NORETRY | __GFP_NOWARN,
+                                   get_order(*size));
                if (folio)
                        return folio;
                *size = rounddown_pow_of_two(*size - 1);