summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/huge_memory.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index f33a6148e4c2..e8ccf8979648 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -2367,24 +2367,16 @@ static void lru_add_page_tail(struct page *head, struct page *tail,
VM_BUG_ON_PAGE(PageLRU(tail), head);
lockdep_assert_held(&lruvec_pgdat(lruvec)->lru_lock);
- if (!list)
- SetPageLRU(tail);
-
- if (likely(PageLRU(head)))
- list_add_tail(&tail->lru, &head->lru);
- else if (list) {
+ if (list) {
/* page reclaim is reclaiming a huge page */
+ VM_WARN_ON(PageLRU(head));
get_page(tail);
list_add_tail(&tail->lru, list);
} else {
- /*
- * Head page has not yet been counted, as an hpage,
- * so we must account for each subpage individually.
- *
- * Put tail on the list at the correct position
- * so they all end up in order.
- */
- add_page_to_lru_list_tail(tail, lruvec, page_lru(tail));
+ /* head is still on lru (and we have it frozen) */
+ VM_WARN_ON(!PageLRU(head));
+ SetPageLRU(tail);
+ list_add_tail(&tail->lru, &head->lru);
}
}