Re: [PATCH 10/17] jbd2: replace __get_free_pages() with kmalloc()

From: David Laight

Date: Mon May 25 2026 - 13:22:00 EST


On Mon, 25 May 2026 18:17:04 +0200
Jan Kara <jack@xxxxxxx> wrote:

> On Sat 23-05-26 20:54:22, Mike Rapoport (Microsoft) wrote:
> > jbd2_alloc() falls back from kmem_cache_alloc() to __get_free_pages() for
> > allocations larger than PAGE_SIZE.
> > But kmalloc() can handle such cases with essentially the same fallback.
> >
> > Replace use of __get_free_pages() with kmalloc() and simplify
> > jbd2_free() as both kmem_cache_alloc() and kmalloc() allocations can be
> > freed with kfree().
> >
> > Signed-off-by: Mike Rapoport (Microsoft) <rppt@xxxxxxxxxx>
>
> Looks good. Feel free to add:
>
> Reviewed-by: Jan Kara <jack@xxxxxxx>
>
> I'll just note that we allocate here fs block size large buffer so the same
> kind of allocator as we use for folios would be even better. But that's a
> different cleanup I guess.

Would kvalloc() be more appropriate here?
Does __get_free_pages() return physically contiguous memory?

-- David

>
> Honza
>
> > ---
> > fs/jbd2/journal.c | 7 ++-----
> > 1 file changed, 2 insertions(+), 5 deletions(-)
> >
> > diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
> > index 4f397fcdb13c..1137b471e490 100644
> > --- a/fs/jbd2/journal.c
> > +++ b/fs/jbd2/journal.c
> > @@ -2784,7 +2784,7 @@ void *jbd2_alloc(size_t size, gfp_t flags)
> > if (size < PAGE_SIZE)
> > ptr = kmem_cache_alloc(get_slab(size), flags);
> > else
> > - ptr = (void *)__get_free_pages(flags, get_order(size));
> > + ptr = kmalloc(size, flags);
> >
> > /* Check alignment; SLUB has gotten this wrong in the past,
> > * and this can lead to user data corruption! */
> > @@ -2795,10 +2795,7 @@ void *jbd2_alloc(size_t size, gfp_t flags)
> >
> > void jbd2_free(void *ptr, size_t size)
> > {
> > - if (size < PAGE_SIZE)
> > - kmem_cache_free(get_slab(size), ptr);
> > - else
> > - free_pages((unsigned long)ptr, get_order(size));
> > + kfree(ptr);
> > };
> >
> > /*
> >
> > --
> > 2.53.0
> >