We should always increase the refcount before doing anything else to the page so that other page users see the elevated refcount first. Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> --- mm/gup.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mm/gup.c b/mm/gup.c index a9d4d724aef7..08020987dfc0 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -220,18 +220,18 @@ bool __must_check try_grab_page(struct page *page, unsigned int flags) if (WARN_ON_ONCE(page_ref_count(page) <= 0)) return false; - if (hpage_pincount_available(page)) - hpage_pincount_add(page, 1); - else - refs = GUP_PIN_COUNTING_BIAS; - /* * Similar to try_grab_compound_head(): even if using the * hpage_pincount_add/_sub() routines, be sure to * *also* increment the normal page refcount field at least * once, so that the page really is pinned. */ - page_ref_add(page, refs); + if (hpage_pincount_available(page)) { + page_ref_add(page, 1); + hpage_pincount_add(page, 1); + } else { + page_ref_add(page, GUP_PIN_COUNTING_BIAS); + } mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_ACQUIRED, 1); } -- 2.34.1