diff
 struct page {
+    atomic_t ref_count;
     // ... other members ...
 };

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