On Fri, Nov 21, 2025 at 03:27:18AM +0000, Jaegeuk Kim wrote:
> This patch introduces a new POSIX_FADV_MLOCK which 1) invalidates the range of
> cached pages, 2) sets the mapping as inaccessible, 3) POSIX_FADV_WILLNEED 
> loads
> pages directly to the inaccessible mapping.

... what?

This seems like something which is completely different from mlock().
So it needs a different name.

But I don't understand the point of this, whatever it's called.  Need
more information.

> The inaccessible pages will be invalidated by evict_inode or explicit 
> munlock().
> 
> Cc: Matthew Wilcox (Oracle) <[email protected]>
> Cc: Christian Brauner <[email protected]>
> Signed-off-by: Jaegeuk Kim <[email protected]>
> ---
>  include/uapi/linux/fadvise.h |  2 ++
>  mm/fadvise.c                 | 14 ++++++++++++++
>  2 files changed, 16 insertions(+)
> 
> diff --git a/include/uapi/linux/fadvise.h b/include/uapi/linux/fadvise.h
> index 0862b87434c2..06018688b99b 100644
> --- a/include/uapi/linux/fadvise.h
> +++ b/include/uapi/linux/fadvise.h
> @@ -19,4 +19,6 @@
>  #define POSIX_FADV_NOREUSE   5 /* Data will be accessed once.  */
>  #endif
>  
> +#define POSIX_FADV_MLOCK     8 /* Load pages into inaccessible map.  */
> +
>  #endif       /* FADVISE_H_INCLUDED */
> diff --git a/mm/fadvise.c b/mm/fadvise.c
> index 588fe76c5a14..849b151d2024 100644
> --- a/mm/fadvise.c
> +++ b/mm/fadvise.c
> @@ -56,6 +56,7 @@ int generic_fadvise(struct file *file, loff_t offset, 
> loff_t len, int advice)
>               case POSIX_FADV_WILLNEED:
>               case POSIX_FADV_NOREUSE:
>               case POSIX_FADV_DONTNEED:
> +             case POSIX_FADV_MLOCK:
>                       /* no bad return value, but ignore advice */
>                       break;
>               default:
> @@ -93,6 +94,19 @@ int generic_fadvise(struct file *file, loff_t offset, 
> loff_t len, int advice)
>               file->f_mode &= ~FMODE_RANDOM;
>               spin_unlock(&file->f_lock);
>               break;
> +     case POSIX_FADV_MLOCK:
> +             /* Remove the cached pages. */
> +             if (!mapping_unevictable(mapping)) {
> +                     invalidate_inode_pages2_range(mapping,
> +                                     offset >> PAGE_SHIFT,
> +                                     (offset + len - 1) >> PAGE_SHIFT);
> +
> +                     /* set the mapping is unevictable */
> +                     filemap_invalidate_lock(mapping);
> +                     mapping_set_inaccessible(mapping);
> +                     filemap_invalidate_unlock(mapping);
> +             }
> +             fallthrough;
>       case POSIX_FADV_WILLNEED:
>               /* First and last PARTIAL page! */
>               start_index = offset >> PAGE_SHIFT;
> -- 
> 2.52.0.487.g5c8c507ade-goog
> 


_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to