return true;
 }
 
+/* page is NOT reusable when:
+ * 1) allocated when system is under some pressure. (page_is_pfmemalloc)
+ * 2) belongs to a different NUMA node than pool->p.nid.
+ *
+ * To update pool->p.nid users must call page_pool_update_nid.
+ */
+static bool pool_page_reusable(struct page_pool *pool, struct page *page)
+{
+       return !page_is_pfmemalloc(page) && page_to_nid(page) == pool->p.nid;
+}
+
 void __page_pool_put_page(struct page_pool *pool,
                          struct page *page, bool allow_direct)
 {
         *
         * refcnt == 1 means page_pool owns page, and can recycle it.
         */
-       if (likely(page_ref_count(page) == 1)) {
+       if (likely(page_ref_count(page) == 1 &&
+                  pool_page_reusable(pool, page))) {
                /* Read barrier done in page_ref_count / READ_ONCE */
 
                if (allow_direct && in_serving_softirq())