diff
+static inline void safe_free_unref_page(struct page **page_ptr, unsigned int order)
+{
+    if (page_ptr && *page_ptr) {
+        free_unref_page(*page_ptr, order);
+        *page_ptr = NULL;
+    }
+}

 static inline void free_the_page(struct page *page, unsigned int order)
 {
     if (pcp_allowed_order(order))        /* Via pcp? */
-        free_unref_page(page, order);
+        safe_free_unref_page(&page, order);
 }
