History

mm: Turn head_compound_mapcount() into folio_entire_mapcount()

Adjust documentation to be more clear.

Matthew Wilcox (Oracle) committed 4 years ago

Commit 74e8ee41 parent e20c41b2 files · +15 −8Browse files

Unified · Split

2 files
  1. include/linux/mm.h +11 −6
  2. mm/debug.c +4 −2
include/linux/mm.h+11−6
@@ -776,21 +776,26 @@ static inline int is_vmalloc_or_module_addr(const void *x) · 775 unmodified lines
776776 }
777777 #endif
778778
779−static inline int head_compound_mapcount(struct page *head)
779+/*
780+ * How many times the entire folio is mapped as a single unit (eg by a
781+ * PMD or PUD entry). This is probably not what you want, except for
782+ * debugging purposes; look at folio_mapcount() or page_mapcount()
783+ * instead.
784+ */
785+static inline int folio_entire_mapcount(struct folio *folio)
780786 {
781− return atomic_read(compound_mapcount_ptr(head)) + 1;
787+ VM_BUG_ON_FOLIO(!folio_test_large(folio), folio);
788+ return atomic_read(folio_mapcount_ptr(folio)) + 1;
782789 }
783790
784791 /*
785792 * Mapcount of compound page as a whole, does not include mapped sub-pages.
786793 *
787− * Must be called only for compound pages or any their tail sub-pages.
794+ * Must be called only for compound pages.
788795 */
789796 static inline int compound_mapcount(struct page *page)
790797 {
791− VM_BUG_ON_PAGE(!PageCompound(page), page);
792− page = compound_head(page);
793− return head_compound_mapcount(page);
798+ return folio_entire_mapcount(page_folio(page));
794799 }
795800
796801 /*
mm/debug.c+4−2
@@ -48,7 +48,8 @@ const struct trace_print_flags vmaflag_names[] = { · 47 unmodified lines
4848
4949 static void __dump_page(struct page *page)
5050 {
51− struct page *head = compound_head(page);
51+ struct folio *folio = page_folio(page);
52+ struct page *head = &folio->page;
5253 struct address_space *mapping;
5354 bool compound = PageCompound(page);
5455 /*
@@ -76,6 +77,7 @@ static void __dump_page(struct page *page) · 21 unmodified lines
7677 else
7778 mapping = (void *)(tmp & ~PAGE_MAPPING_FLAGS);
7879 head = page;
80+ folio = (struct folio *)page;
7981 compound = false;
8082 } else {
8183 mapping = page_mapping(page);
@@ -94,7 +96,7 @@ static void __dump_page(struct page *page) · 12 unmodified lines
9496 if (compound) {
9597 pr_warn("head:%p order:%u compound_mapcount:%d compound_pincount:%d\n",
9698 head, compound_order(head),
97− head_compound_mapcount(head),
99+ folio_entire_mapcount(folio),
98100 head_compound_pincount(head));
99101 }
100102

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t