diff
 struct page {
+    bool is_freed;
     // ... other members ...
 };

 static inline void free_the_page(struct page *page, unsigned int order)
 {
     if (pcp_allowed_order(order)) {      /* Via pcp? */
+        if (!page->is_freed) {
             free_unref_page(page, order);
+            page->is_freed = true;
+        }
     }
 }
