The patch titled mlock-mlocked-pages-are-unevictable: fix truncate race and sevaral comments has been added to the -mm tree. Its filename is mlock-mlocked-pages-are-unevictable-fix-truncate-race-and-sevaral-comments.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: mlock-mlocked-pages-are-unevictable: fix truncate race and sevaral comments From: KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx> This patch is part of putback_lru_page() rework. several comment fix and one bugfix contained. Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx> Signed-off-by: Lee Schermerhorn <Lee.Schermerhorn@xxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/mlock.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff -puN mm/mlock.c~mlock-mlocked-pages-are-unevictable-fix-truncate-race-and-sevaral-comments mm/mlock.c --- a/mm/mlock.c~mlock-mlocked-pages-are-unevictable-fix-truncate-race-and-sevaral-comments +++ a/mm/mlock.c @@ -54,7 +54,11 @@ EXPORT_SYMBOL(can_do_mlock); */ void __clear_page_mlock(struct page *page) { - VM_BUG_ON(!PageLocked(page)); /* for LRU isolate/putback */ + VM_BUG_ON(!PageLocked(page)); + + if (!page->mapping) { /* truncated ? */ + return; + } if (!isolate_lru_page(page)) { putback_lru_page(page); @@ -138,7 +142,9 @@ static int __mlock_vma_pages_range(struc /* * get_user_pages makes pages present if we are - * setting mlock. + * setting mlock. and this extra reference count will + * disable migration of this page. However, page may + * still be truncated out from under us. */ ret = get_user_pages(current, mm, addr, min_t(int, nr_pages, ARRAY_SIZE(pages)), @@ -166,11 +172,12 @@ static int __mlock_vma_pages_range(struc for (i = 0; i < ret; i++) { struct page *page = pages[i]; + lock_page(page); /* - * page might be truncated or migrated out from under - * us. Check after acquiring page lock. + * Because we lock page here and migration is blocked + * by the elevated reference, we need only check for + * page truncation (file-cache only). */ - lock_page(page); if (page->mapping) mlock_vma_page(page); unlock_page(page); _ Patches currently in -mm which might be from kosaki.motohiro@xxxxxxxxxxxxxx are page-allocator-inlnie-some-__alloc_pages-wrappers.patch page-allocator-inlnie-some-__alloc_pages-wrappers-fix.patch mm-hugetlbc-fix-duplicate-variable.patch page-flags-record-page-flag-overlays-explicitly.patch slub-record-page-flag-overlays-explicitly.patch slob-record-page-flag-overlays-explicitly.patch pm-schedule-sysrq-poweroff-on-boot-cpu-fix.patch call_usermodehelper-increase-reliability.patch cgroup-list_for_each-cleanup-v2.patch cgroup-anotate-two-variables-with-__read_mostly.patch memcg-remove-refcnt-from-page_cgroup-fix-memcg-fix-mem_cgroup_end_migration-race.patch memcg-remove-refcnt-from-page_cgroup-memcg-fix-shmem_unuse_inode-charging.patch memcg-handle-swap-cache-fix-shmem-page-migration-incorrectness-on-memcgroup.patch memcg-clean-up-checking-of-the-disabled-flag.patch memcg-clean-up-checking-of-the-disabled-flag-memcg-further-checking-of-disabled-flag.patch per-task-delay-accounting-update-document-and-getdelaysc-for-memory-reclaim.patch full-conversion-to-early_initcall-interface-remove-old-interface-fix-fix.patch relay-add-buffer-only-channels-useful-for-early-logging-fix.patch mm-speculative-page-references-fix-migration_entry_wait-for-speculative-page-cache.patch vmscan-use-an-indexed-array-for-lru-variables.patch swap-use-an-array-for-the-lru-pagevecs.patch define-page_file_cache-function-fix-splitlru-shmem_getpage-setpageswapbacked-sooner.patch vmscan-split-lru-lists-into-anon-file-sets-collect-lru-meminfo-statistics-from-correct-offset.patch vmscan-split-lru-lists-into-anon-file-sets-prevent-incorrect-oom-under-split_lru.patch vmscan-split-lru-lists-into-anon-file-sets-split_lru-fix-pagevec_move_tail-doesnt-treat-unevictable-page.patch vmscan-split-lru-lists-into-anon-file-sets-splitlru-memcg-swapbacked-pages-active.patch vmscan-split-lru-lists-into-anon-file-sets-splitlru-bdi_cap_swap_backed.patch vmscan-second-chance-replacement-for-anonymous-pages.patch unevictable-lru-infrastructure.patch unevictable-lru-infrastructure-fix.patch unevictable-lru-infrastructure-remove-redundant-page-mapping-check.patch unevictable-lru-infrastructure-putback_lru_page-unevictable-page-handling-rework.patch unevictable-lru-infrastructure-kill-unnecessary-lock_page-in-vmscanc.patch unevictable-lru-infrastructure-revert-migration-change-of-unevictable-lru-infrastructure.patch unevictable-lru-page-statistics.patch unevictable-lru-page-statistics-fix-printk-in-show_free_areas.patch unevictable-lru-page-statistics-units-fix.patch shm_locked-pages-are-unevictable.patch shm_locked-pages-are-unevictable-revert-shm-change-of-shm_locked-pages-are-unevictable-patch.patch mlock-mlocked-pages-are-unevictable.patch mlock-mlocked-pages-are-unevictable-fix.patch mlock-mlocked-pages-are-unevictable-fix-fix.patch mlock-mlocked-pages-are-unevictable-fix-3.patch mlock-mlocked-pages-are-unevictable-fix-fix-munlock-page-table-walk-now-requires-mm.patch mlock-mlocked-pages-are-unevictable-restore-patch-failure-hunk-of-mlock-mlocked-pages-are-unevictablepatch.patch mlock-mlocked-pages-are-unevictable-fix-truncate-race-and-sevaral-comments.patch mmap-handle-mlocked-pages-during-map-remap-unmap.patch fix-double-unlock_page-in-2626-rc5-mm3-kernel-bug-at-mm-filemapc-575.patch mmap-handle-mlocked-pages-during-map-remap-unmap-cleanup.patch vmstat-mlocked-pages-statistics.patch vmstat-mlocked-pages-statistics-fix-incorrect-mlocked-field-of-proc-meminfo.patch vmstat-mlocked-pages-statistics-fix.patch swap-cull-unevictable-pages-in-fault-path-fix.patch vmstat-unevictable-and-mlocked-pages-vm-events.patch restore-patch-failure-of-vmstat-unevictable-and-mlocked-pages-vm-eventspatch.patch vmscan-unevictable-lru-scan-sysctl.patch vmscan-unevictable-lru-scan-sysctl-nommu-fix.patch vmscam-kill-unused-lru-functions.patch make-mm-memoryc-print_bad_pte-static.patch mm-swapfilec-make-code-static.patch make-mm-rmapc-anon_vma_cachep-static.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html