This allows guest_memfd to pass in a memory policy.
Signed-off-by: Matthew Wilcox (Oracle) willy@infradead.org
Reviewed-by: Pankaj Gupta pankaj.gupta@amd.com
include/linux/pagemap.h | 10 ++++++++-- mm/filemap.c | 10 ++++++---- 2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index c176aeeb38db..1cfbf7b8f573 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -745,11 +745,17 @@ static inline fgf_t fgf_set_order(size_t size) } void *filemap_get_entry(struct address_space *mapping, pgoff_t index); -struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index,
fgf_t fgp_flags, gfp_t gfp);
+struct folio *__filemap_get_folio_mpol(struct address_space *mapping,
struct page *pagecache_get_page(struct address_space *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp);pgoff_t index, fgf_t fgf_flags, gfp_t gfp, struct mempolicy *);
+static inline struct folio *__filemap_get_folio(struct address_space *mapping,
pgoff_t index, fgf_t fgf_flags, gfp_t gfp)
+{
- return __filemap_get_folio_mpol(mapping, index, fgf_flags, gfp, NULL);
+}
- /**
- filemap_get_folio - Find and get a folio.
- @mapping: The address_space to search.
diff --git a/mm/filemap.c b/mm/filemap.c index a26df313207d..597d146cbb3a 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1896,11 +1896,12 @@ void *filemap_get_entry(struct address_space *mapping, pgoff_t index) } /**
- __filemap_get_folio - Find and get a reference to a folio.
- __filemap_get_folio_mpol - Find and get a reference to a folio.
- @mapping: The address_space to search.
- @index: The page index.
- @fgp_flags: %FGP flags modify how the folio is returned.
- @gfp: Memory allocation flags to use if %FGP_CREAT is specified.
- @policy: NUMA memory allocation policy to follow.
- Looks up the page cache entry at @mapping & @index.
@@ -1911,8 +1912,9 @@ void *filemap_get_entry(struct address_space *mapping, pgoff_t index)
- Return: The found folio or an ERR_PTR() otherwise.
*/ -struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index,
fgf_t fgp_flags, gfp_t gfp)
+struct folio *__filemap_get_folio_mpol(struct address_space *mapping,
pgoff_t index, fgf_t fgp_flags, gfp_t gfp,
{ struct folio *folio;struct mempolicy *policy)
@@ -1982,7 +1984,7 @@ struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index, err = -ENOMEM; if (order > min_order) alloc_gfp |= __GFP_NORETRY | __GFP_NOWARN;
folio = filemap_alloc_folio(alloc_gfp, order, NULL);
folio = filemap_alloc_folio(alloc_gfp, order, policy); if (!folio) continue;