return true;
 }
 
-static inline int free_pages_check(struct page *page)
+static void free_pages_check_bad(struct page *page)
 {
        const char *bad_reason;
        unsigned long bad_flags;
 
-       if (page_expected_state(page, PAGE_FLAGS_CHECK_AT_FREE)) {
-               page_cpupid_reset_last(page);
-               page->flags &= ~PAGE_FLAGS_CHECK_AT_PREP;
-               return 0;
-       }
-
-       /* Something has gone sideways, find it */
        bad_reason = NULL;
        bad_flags = 0;
 
                bad_reason = "page still charged to cgroup";
 #endif
        bad_page(page, bad_reason, bad_flags);
+}
+
+static inline int free_pages_check(struct page *page)
+{
+       if (likely(page_expected_state(page, PAGE_FLAGS_CHECK_AT_FREE))) {
+               page_cpupid_reset_last(page);
+               page->flags &= ~PAGE_FLAGS_CHECK_AT_PREP;
+               return 0;
+       }
+
+       /* Something has gone sideways, find it */
+       free_pages_check_bad(page);
        return 1;
 }