[PATCH 08/11] shmem: Add shmem_writeout()
Baolin Wang
baolin.wang at linux.alibaba.com
Sat Mar 8 05:31:54 UTC 2025
On 2025/3/7 21:54, Matthew Wilcox (Oracle) wrote:
> This will be the replacement for shmem_writepage().
>
> Signed-off-by: Matthew Wilcox (Oracle) <willy at infradead.org>
LGTM.
Reviewed-by: Baolin Wang <baolin.wang at linux.alibaba.com>
> ---
> include/linux/shmem_fs.h | 7 ++++---
> mm/shmem.c | 20 ++++++++++++++------
> 2 files changed, 18 insertions(+), 9 deletions(-)
>
> diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h
> index 0b273a7b9f01..5f03a39a26f7 100644
> --- a/include/linux/shmem_fs.h
> +++ b/include/linux/shmem_fs.h
> @@ -104,10 +104,11 @@ static inline bool shmem_mapping(struct address_space *mapping)
> return false;
> }
> #endif /* CONFIG_SHMEM */
> -extern void shmem_unlock_mapping(struct address_space *mapping);
> -extern struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
> +void shmem_unlock_mapping(struct address_space *mapping);
> +struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
> pgoff_t index, gfp_t gfp_mask);
> -extern void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end);
> +int shmem_writeout(struct folio *folio, struct writeback_control *wbc);
> +void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end);
> int shmem_unuse(unsigned int type);
>
> #ifdef CONFIG_TRANSPARENT_HUGEPAGE
> diff --git a/mm/shmem.c b/mm/shmem.c
> index ba162e991285..427b7f70fffb 100644
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -1536,12 +1536,20 @@ int shmem_unuse(unsigned int type)
> return error;
> }
>
> -/*
> - * Move the page from the page cache to the swap cache.
> - */
> static int shmem_writepage(struct page *page, struct writeback_control *wbc)
> {
> - struct folio *folio = page_folio(page);
> + return shmem_writeout(page_folio(page), wbc);
> +}
> +
> +/**
> + * shmem_writeout - Write the folio to swap
> + * @folio: The folio to write
> + * @wbc: How writeback is to be done
> + *
> + * Move the folio from the page cache to the swap cache.
> + */
> +int shmem_writeout(struct folio *folio, struct writeback_control *wbc)
> +{
> struct address_space *mapping = folio->mapping;
> struct inode *inode = mapping->host;
> struct shmem_inode_info *info = SHMEM_I(inode);
> @@ -1586,9 +1594,8 @@ static int shmem_writepage(struct page *page, struct writeback_control *wbc)
> try_split:
> /* Ensure the subpages are still dirty */
> folio_test_set_dirty(folio);
> - if (split_huge_page_to_list_to_order(page, wbc->list, 0))
> + if (split_folio_to_list(folio, wbc->list))
> goto redirty;
> - folio = page_folio(page);
> folio_clear_dirty(folio);
> }
>
> @@ -1660,6 +1667,7 @@ static int shmem_writepage(struct page *page, struct writeback_control *wbc)
> folio_unlock(folio);
> return 0;
> }
> +EXPORT_SYMBOL_GPL(shmem_writeout);
>
> #if defined(CONFIG_NUMA) && defined(CONFIG_TMPFS)
> static void shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol)
More information about the Intel-gfx
mailing list