[PATCH] mm/khugepaged: use page_cache_sync_ra() directly

Aditya Prakash Srivastava posted 1 patch 1 week, 2 days ago
mm/khugepaged.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
[PATCH] mm/khugepaged: use page_cache_sync_ra() directly
Posted by Aditya Prakash Srivastava 1 week, 2 days ago
The static inline page_cache_sync_readahead() wrapper in pagemap.h
is legacy and only wraps page_cache_sync_ra() after initializing
a local readahead_control structure using DEFINE_READAHEAD.

Modernize the khugepaged readahead call by using page_cache_sync_ra()
directly. This avoids the legacy wrapper and aligns the khugepaged
readahead implementation with other subsystems in the kernel.

No functional change is introduced, as the logic and behavior
remain identical.

Signed-off-by: Aditya Prakash Srivastava <aditya.ansh182@gmail.com>
---
 mm/khugepaged.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 617bca76db49..2682b39401b2 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -2331,10 +2331,10 @@ static enum scan_result collapse_file(struct mm_struct *mm, unsigned long addr,
 			}
 		} else {	/* !is_shmem */
 			if (!folio || xa_is_value(folio)) {
+				DEFINE_READAHEAD(ractl, file, &file->f_ra, mapping, index);
+
 				xas_unlock_irq(&xas);
-				page_cache_sync_readahead(mapping, &file->f_ra,
-							  file, index,
-							  end - index);
+				page_cache_sync_ra(&ractl, end - index);
 				/* drain lru cache to help folio_isolate_lru() */
 				lru_add_drain();
 				folio = filemap_lock_folio(mapping, index);
-- 
2.47.3
Re: [PATCH] mm/khugepaged: use page_cache_sync_ra() directly
Posted by Lorenzo Stoakes (ARM) 1 week, 2 days ago
On Thu, Jul 16, 2026 at 08:32:11AM +0000, Aditya Prakash Srivastava wrote:
> The static inline page_cache_sync_readahead() wrapper in pagemap.h
> is legacy and only wraps page_cache_sync_ra() after initializing
> a local readahead_control structure using DEFINE_READAHEAD.

As Dev notes there's nothing legacy about it, it's used in multiple places.

>
> Modernize the khugepaged readahead call by using page_cache_sync_ra()
> directly. This avoids the legacy wrapper and aligns the khugepaged
> readahead implementation with other subsystems in the kernel.

Nope, it's replacing a helper function that wraps something with open coding it
instead for no good reason.

>
> No functional change is introduced, as the logic and behavior
> remain identical.
>
> Signed-off-by: Aditya Prakash Srivastava <aditya.ansh182@gmail.com>

Sorry this patch is replacing a wrapper with open code for not really much
benefit.

> ---
>  mm/khugepaged.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> index 617bca76db49..2682b39401b2 100644
> --- a/mm/khugepaged.c
> +++ b/mm/khugepaged.c
> @@ -2331,10 +2331,10 @@ static enum scan_result collapse_file(struct mm_struct *mm, unsigned long addr,
>  			}
>  		} else {	/* !is_shmem */
>  			if (!folio || xa_is_value(folio)) {
> +				DEFINE_READAHEAD(ractl, file, &file->f_ra, mapping, index);
> +
>  				xas_unlock_irq(&xas);
> -				page_cache_sync_readahead(mapping, &file->f_ra,
> -							  file, index,
> -							  end - index);
> +				page_cache_sync_ra(&ractl, end - index);
>  				/* drain lru cache to help folio_isolate_lru() */
>  				lru_add_drain();
>  				folio = filemap_lock_folio(mapping, index);
> --
> 2.47.3
>

Cheers, Lorenzo
Re: [PATCH] mm/khugepaged: use page_cache_sync_ra() directly
Posted by Aditya Prakash Srivastava 1 week, 2 days ago
Thanks for the feedback. I agree that replacing the helper with
its open-coded implementation at a single call site doesn't
provide a meaningful improvement. I'll drop this patch.

Thanks,
Aditya

On Thu, Jul 16, 2026 at 2:41 PM Lorenzo Stoakes (ARM) <ljs@kernel.org> wrote:
>
> On Thu, Jul 16, 2026 at 08:32:11AM +0000, Aditya Prakash Srivastava wrote:
> > The static inline page_cache_sync_readahead() wrapper in pagemap.h
> > is legacy and only wraps page_cache_sync_ra() after initializing
> > a local readahead_control structure using DEFINE_READAHEAD.
>
> As Dev notes there's nothing legacy about it, it's used in multiple places.
>
> >
> > Modernize the khugepaged readahead call by using page_cache_sync_ra()
> > directly. This avoids the legacy wrapper and aligns the khugepaged
> > readahead implementation with other subsystems in the kernel.
>
> Nope, it's replacing a helper function that wraps something with open coding it
> instead for no good reason.
>
> >
> > No functional change is introduced, as the logic and behavior
> > remain identical.
> >
> > Signed-off-by: Aditya Prakash Srivastava <aditya.ansh182@gmail.com>
>
> Sorry this patch is replacing a wrapper with open code for not really much
> benefit.
>
> > ---
> >  mm/khugepaged.c | 6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> > index 617bca76db49..2682b39401b2 100644
> > --- a/mm/khugepaged.c
> > +++ b/mm/khugepaged.c
> > @@ -2331,10 +2331,10 @@ static enum scan_result collapse_file(struct mm_struct *mm, unsigned long addr,
> >                       }
> >               } else {        /* !is_shmem */
> >                       if (!folio || xa_is_value(folio)) {
> > +                             DEFINE_READAHEAD(ractl, file, &file->f_ra, mapping, index);
> > +
> >                               xas_unlock_irq(&xas);
> > -                             page_cache_sync_readahead(mapping, &file->f_ra,
> > -                                                       file, index,
> > -                                                       end - index);
> > +                             page_cache_sync_ra(&ractl, end - index);
> >                               /* drain lru cache to help folio_isolate_lru() */
> >                               lru_add_drain();
> >                               folio = filemap_lock_folio(mapping, index);
> > --
> > 2.47.3
> >
>
> Cheers, Lorenzo
Re: [PATCH] mm/khugepaged: use page_cache_sync_ra() directly
Posted by David Hildenbrand (Arm) 1 week, 2 days ago
On 7/16/26 10:32, Aditya Prakash Srivastava wrote:
> The static inline page_cache_sync_readahead() wrapper in pagemap.h
> is legacy and only wraps page_cache_sync_ra() after initializing
> a local readahead_control structure using DEFINE_READAHEAD.
> 
> Modernize the khugepaged readahead call by using page_cache_sync_ra()
> directly. This avoids the legacy wrapper and aligns the khugepaged
> readahead implementation with other subsystems in the kernel.
> 
> No functional change is introduced, as the logic and behavior
> remain identical.
> 
> Signed-off-by: Aditya Prakash Srivastava <aditya.ansh182@gmail.com>
> ---
>  mm/khugepaged.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> index 617bca76db49..2682b39401b2 100644
> --- a/mm/khugepaged.c
> +++ b/mm/khugepaged.c
> @@ -2331,10 +2331,10 @@ static enum scan_result collapse_file(struct mm_struct *mm, unsigned long addr,
>  			}
>  		} else {	/* !is_shmem */
>  			if (!folio || xa_is_value(folio)) {
> +				DEFINE_READAHEAD(ractl, file, &file->f_ra, mapping, index);
> +
>  				xas_unlock_irq(&xas);
> -				page_cache_sync_readahead(mapping, &file->f_ra,
> -							  file, index,
> -							  end - index);
> +				page_cache_sync_ra(&ractl, end - index);

The page_cache_sync_readahead() call nicely wraps these two things.

You are essentially duplicating code, no?

So I also miss the point.

-- 
Cheers,

David
Re: [PATCH] mm/khugepaged: use page_cache_sync_ra() directly
Posted by Dev Jain 1 week, 2 days ago

On 16/07/26 2:02 pm, Aditya Prakash Srivastava wrote:
> The static inline page_cache_sync_readahead() wrapper in pagemap.h
> is legacy and only wraps page_cache_sync_ra() after initializing

How exactly is this a legacy interface?

> a local readahead_control structure using DEFINE_READAHEAD.
> 
> Modernize the khugepaged readahead call by using page_cache_sync_ra()
> directly. This avoids the legacy wrapper and aligns the khugepaged
> readahead implementation with other subsystems in the kernel.

I can see multiple callers of page_cache_sync_readahead.
> 
> No functional change is introduced, as the logic and behavior
> remain identical.
> 
> Signed-off-by: Aditya Prakash Srivastava <aditya.ansh182@gmail.com>
> ---
>  mm/khugepaged.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> index 617bca76db49..2682b39401b2 100644
> --- a/mm/khugepaged.c
> +++ b/mm/khugepaged.c
> @@ -2331,10 +2331,10 @@ static enum scan_result collapse_file(struct mm_struct *mm, unsigned long addr,
>  			}
>  		} else {	/* !is_shmem */
>  			if (!folio || xa_is_value(folio)) {
> +				DEFINE_READAHEAD(ractl, file, &file->f_ra, mapping, index);
> +
>  				xas_unlock_irq(&xas);
> -				page_cache_sync_readahead(mapping, &file->f_ra,
> -							  file, index,
> -							  end - index);
> +				page_cache_sync_ra(&ractl, end - index);
>  				/* drain lru cache to help folio_isolate_lru() */
>  				lru_add_drain();
>  				folio = filemap_lock_folio(mapping, index);