goto isolate_fail;
                }
 
+               /*
+                * Be careful not to clear PageLRU until after we're
+                * sure the page is not being freed elsewhere -- the
+                * page release code relies on it.
+                */
+               if (unlikely(!get_page_unless_zero(page)))
+                       goto isolate_fail;
+
                /*
                 * Migration will fail if an anonymous page is pinned in memory,
                 * so avoid taking lru_lock and isolating it unnecessarily in an
                 * admittedly racy check.
                 */
                mapping = page_mapping(page);
-               if (!mapping && page_count(page) > page_mapcount(page))
-                       goto isolate_fail;
+               if (!mapping && (page_count(page) - 1) > total_mapcount(page))
+                       goto isolate_fail_put;
 
                /*
                 * Only allow to migrate anonymous pages in GFP_NOFS context
                 * because those do not depend on fs locks.
                 */
                if (!(cc->gfp_mask & __GFP_FS) && mapping)
-                       goto isolate_fail;
-
-               /*
-                * Be careful not to clear PageLRU until after we're
-                * sure the page is not being freed elsewhere -- the
-                * page release code relies on it.
-                */
-               if (unlikely(!get_page_unless_zero(page)))
-                       goto isolate_fail;
+                       goto isolate_fail_put;
 
                /* Only take pages on LRU: a check now makes later tests safe */
                if (!PageLRU(page))