On Mon, 19 Oct 2015, Minchan Kim wrote: > Stable page could be shared by several processes and last process > could own the page among them after CoW or zapping for every process > except last process happens. Then, page table entry of the page > in last process can have no dirty bit and PG_dirty flag in page->flags. > In this case, MADV_FREE could discard the page wrongly. > For preventing it, we mark stable page dirty. I agree with the change, but found that comment (repeated in the source) rather hard to follow. And it doesn't really do justice to the changes you have made. This is not now a MADV_FREE thing, it's more general than that, even if MADV_FREE is the only thing that takes advantage of it. I like very much that you've made page reclaim sane, freeing non-dirty anonymous pages instead of swapping them out, without having to think of whether it's for MADV_FREE or not. Would you mind if we replace your patch by a re-commented version? [PATCH] mm: mark stable page dirty in KSM The MADV_FREE patchset changes page reclaim to simply free a clean anonymous page with no dirty ptes, instead of swapping it out; but KSM uses clean write-protected ptes to reference the stable ksm page. So be sure to mark that page dirty, so it's never mistakenly discarded. Signed-off-by: Minchan Kim <minchan@xxxxxxxxxx> Signed-off-by: Hugh Dickins <hughd@xxxxxxxxxx> --- mm/ksm.c | 6 ++++++ 1 file changed, 6 insertions(+) diff -puN mm/ksm.c~mm-mark-stable-page-dirty-in-ksm mm/ksm.c --- a/mm/ksm.c~mm-mark-stable-page-dirty-in-ksm +++ a/mm/ksm.c @@ -1050,6 +1050,12 @@ static int try_to_merge_one_page(struct */ set_page_stable_node(page, NULL); mark_page_accessed(page); + /* + * Page reclaim just frees a clean page with no dirty + * ptes: make sure that the ksm page would be swapped. + */ + if (!PageDirty(page)) + SetPageDirty(page); err = 0; } else if (pages_identical(page, kpage)) err = replace_page(vma, page, kpage, orig_pte); -- 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>