mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 21:54:11 +08:00
mm: introduce page_mapcount_is_type()
Resolve the awkward "and add one to this opaque constant" test into a self-documenting inline function. Link: https://lkml.kernel.org/r/20240821173914.2270383-3-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: David Hildenbrand <david@redhat.com> Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com> Cc: Kent Overstreet <kent.overstreet@linux.dev> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
e27ad6560e
commit
e880034cf7
@ -166,8 +166,7 @@ static inline int folio_precise_page_mapcount(struct folio *folio,
|
||||
{
|
||||
int mapcount = atomic_read(&page->_mapcount) + 1;
|
||||
|
||||
/* Handle page_has_type() pages */
|
||||
if (mapcount < PAGE_MAPCOUNT_RESERVE + 1)
|
||||
if (page_mapcount_is_type(mapcount))
|
||||
mapcount = 0;
|
||||
if (folio_test_large(folio))
|
||||
mapcount += folio_entire_mapcount(folio);
|
||||
|
@ -1228,8 +1228,7 @@ static inline int folio_mapcount(const struct folio *folio)
|
||||
|
||||
if (likely(!folio_test_large(folio))) {
|
||||
mapcount = atomic_read(&folio->_mapcount) + 1;
|
||||
/* Handle page_has_type() pages */
|
||||
if (mapcount < PAGE_MAPCOUNT_RESERVE + 1)
|
||||
if (page_mapcount_is_type(mapcount))
|
||||
mapcount = 0;
|
||||
return mapcount;
|
||||
}
|
||||
|
@ -956,12 +956,18 @@ enum pagetype {
|
||||
#define folio_test_type(folio, flag) \
|
||||
((READ_ONCE(folio->page.page_type) & (PAGE_TYPE_BASE | flag)) == PAGE_TYPE_BASE)
|
||||
|
||||
static inline int page_type_has_type(unsigned int page_type)
|
||||
static inline bool page_type_has_type(int page_type)
|
||||
{
|
||||
return (int)page_type < PAGE_MAPCOUNT_RESERVE;
|
||||
return page_type < PAGE_MAPCOUNT_RESERVE;
|
||||
}
|
||||
|
||||
static inline int page_has_type(const struct page *page)
|
||||
/* This takes a mapcount which is one more than page->_mapcount */
|
||||
static inline bool page_mapcount_is_type(unsigned int mapcount)
|
||||
{
|
||||
return page_type_has_type(mapcount - 1);
|
||||
}
|
||||
|
||||
static inline bool page_has_type(const struct page *page)
|
||||
{
|
||||
return page_type_has_type(READ_ONCE(page->page_type));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user