Commit 02d65d6f authored by Sidhartha Kumar's avatar Sidhartha Kumar Committed by Andrew Morton
Browse files

mm: introduce folio_is_pfmemalloc

Add a folio equivalent for page_is_pfmemalloc. This removes two instances
of page_is_pfmemalloc(folio_page(folio, 0)) so the folio can be used
directly.

Link: https://lkml.kernel.org/r/20230106215251.599222-1-sidhartha.kumar@oracle.com


Suggested-by: default avatarMatthew Wilcox <willy@infradead.org>
Signed-off-by: default avatarSidhartha Kumar <sidhartha.kumar@oracle.com>
Reviewed-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: default avatarSeongJae Park <sj@kernel.org>
Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 17e81022
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -1926,6 +1926,21 @@ static inline bool page_is_pfmemalloc(const struct page *page)
	return (uintptr_t)page->lru.next & BIT(1);
}

/*
 * Return true only if the folio has been allocated with
 * ALLOC_NO_WATERMARKS and the low watermark was not
 * met implying that the system is under some pressure.
 */
static inline bool folio_is_pfmemalloc(const struct folio *folio)
{
	/*
	 * lru.next has bit 1 set if the page is allocated from the
	 * pfmemalloc reserves.  Callers may simply overwrite it if
	 * they do not need to preserve that information.
	 */
	return (uintptr_t)folio->lru.next & BIT(1);
}

/*
 * Only to be called by the page allocator on a freshly allocated
 * page.
+1 −1
Original line number Diff line number Diff line
@@ -1373,7 +1373,7 @@ static struct slab *kmem_getpages(struct kmem_cache *cachep, gfp_t flags,
	/* Make the flag visible before any changes to folio->mapping */
	smp_wmb();
	/* Record if ALLOC_NO_WATERMARKS was set when allocating the slab */
	if (sk_memalloc_socks() && page_is_pfmemalloc(folio_page(folio, 0)))
	if (sk_memalloc_socks() && folio_is_pfmemalloc(folio))
		slab_set_pfmemalloc(slab);

	return slab;
+1 −1
Original line number Diff line number Diff line
@@ -1859,7 +1859,7 @@ static inline struct slab *alloc_slab_page(gfp_t flags, int node,
	__folio_set_slab(folio);
	/* Make the flag visible before any changes to folio->mapping */
	smp_wmb();
	if (page_is_pfmemalloc(folio_page(folio, 0)))
	if (folio_is_pfmemalloc(folio))
		slab_set_pfmemalloc(slab);

	return slab;