On Thu 06-02-20 19:37:33, John Hubbard wrote:
@@ -2258,6 +2268,8 @@ static int record_subpages(struct page *page, unsigned long addr, static void put_compound_head(struct page *page, int refs, unsigned int flags) {
- int orig_refs = refs;
- if (flags & FOLL_PIN) { if (hpage_pincount_available(page)) hpage_pincount_sub(page, refs);
@@ -2273,6 +2285,8 @@ static void put_compound_head(struct page *page, int refs, unsigned int flags) if (refs > 1) page_ref_sub(page, refs - 1); put_page(page);
- mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_RELEASED, orig_refs);
}
Still not quite happy about this :) Now you update NR_FOLL_PIN_RELEASED even if 'flags' don't have FOLL_PIN set. You need to have the mod_node_page_state() inside the "if (flags & FOLL_PIN)" branch above...
Honza