Commit c3a15bff authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Andrew Morton

mm: reimplement folio_order() and folio_nr_pages()

Instead of calling compound_order() and compound_nr_pages(), use the folio
directly.  Saves 1905 bytes from mm/filemap.o due to folio_test_large()
now being a cheaper check than PageHead().

Link: https://lkml.kernel.org/r/20220902194653.1739778-4-willy@infradead.orgSigned-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 379708ff
...@@ -729,7 +729,9 @@ static inline unsigned int compound_order(struct page *page) ...@@ -729,7 +729,9 @@ static inline unsigned int compound_order(struct page *page)
*/ */
static inline unsigned int folio_order(struct folio *folio) static inline unsigned int folio_order(struct folio *folio)
{ {
return compound_order(&folio->page); if (!folio_test_large(folio))
return 0;
return folio->_folio_order;
} }
#include <linux/huge_mm.h> #include <linux/huge_mm.h>
...@@ -1659,7 +1661,13 @@ static inline void set_page_links(struct page *page, enum zone_type zone, ...@@ -1659,7 +1661,13 @@ static inline void set_page_links(struct page *page, enum zone_type zone,
*/ */
static inline long folio_nr_pages(struct folio *folio) static inline long folio_nr_pages(struct folio *folio)
{ {
return compound_nr(&folio->page); if (!folio_test_large(folio))
return 1;
#ifdef CONFIG_64BIT
return folio->_folio_nr_pages;
#else
return 1L << folio->_folio_order;
#endif
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment