On Thu, 3 Dec 2015 21:51:04 +0900 Minchan Kim <minchan@xxxxxxxxxx> wrote: > If anon pages are zapped by unmapping between page_mapped check > and try_to_unmap in shrink_page_list, they could be !PG_dirty > although thre are not MADV_FREEed pages so that VM accoutns it > as pglazyfreed wrongly. > > To fix, this patch counts the number of lazyfree ptes in > try_to_unmap_one and try_to_unmap returns SWAP_LZFREE only if > the count is not zero, page is !PG_dirty and SWAP_SUCCESS. A few tiny things... diff -puN mm/rmap.c~mm-support-madvisemadv_free-fix-2-fix mm/rmap.c --- a/mm/rmap.c~mm-support-madvisemadv_free-fix-2-fix +++ a/mm/rmap.c @@ -1605,7 +1605,7 @@ int try_to_unmap(struct page *page, enum struct rmap_walk_control rwc = { .rmap_one = try_to_unmap_one, - .arg = (void *)&rp, + .arg = &rp, .done = page_not_mapped, .anon_lock = page_lock_anon_vma_read, }; @@ -1651,7 +1651,6 @@ int try_to_unmap(struct page *page, enum int try_to_munlock(struct page *page) { int ret; - struct rmap_private rp = { .flags = TTU_MUNLOCK, .lazyfreed = 0, @@ -1659,7 +1658,7 @@ int try_to_munlock(struct page *page) struct rmap_walk_control rwc = { .rmap_one = try_to_unmap_one, - .arg = (void *)&rp, + .arg = &rp, .done = page_not_mapped, .anon_lock = page_lock_anon_vma_read, diff -puN mm/vmscan.c~mm-support-madvisemadv_free-fix-2-fix mm/vmscan.c _ -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>