mm/migrate: check-before-clear PageSwapCache
authorNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Wed, 15 Apr 2015 23:13:15 +0000 (16:13 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 15 Apr 2015 23:35:17 +0000 (16:35 -0700)
With the page flag sanitization patchset, an invalid usage of
ClearPageSwapCache() is detected in migration_page_copy().
migrate_page_copy() is shared by both normal and hugepage (both thp and
hugetlb) code path, so let's check PageSwapCache() and clear it if it's
set to avoid misuse of the invalid clear operation.

Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/migrate.c

index a65ff72ab7392e291ab69b45cd1d14ac0c16e27b..f53838fe3dfe6e84868b86eb98fedf7abd384ffb 100644 (file)
@@ -537,7 +537,8 @@ void migrate_page_copy(struct page *newpage, struct page *page)
         * Please do not reorder this without considering how mm/ksm.c's
         * get_ksm_page() depends upon ksm_migrate_page() and PageSwapCache().
         */
-       ClearPageSwapCache(page);
+       if (PageSwapCache(page))
+               ClearPageSwapCache(page);
        ClearPagePrivate(page);
        set_page_private(page, 0);