From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753856AbbJ0CXT (ORCPT ); Mon, 26 Oct 2015 22:23:19 -0400 Received: from mail-pa0-f43.google.com ([209.85.220.43]:35947 "EHLO mail-pa0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753808AbbJ0CXP (ORCPT ); Mon, 26 Oct 2015 22:23:15 -0400 Date: Mon, 26 Oct 2015 19:23:12 -0700 (PDT) From: Hugh Dickins X-X-Sender: hugh@eggly.anvils To: Minchan Kim cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Hugh Dickins , Rik van Riel , Mel Gorman , Michal Hocko , Johannes Weiner , "Kirill A. Shutemov" , Vlastimil Babka Subject: Re: [PATCH 5/5] mm: mark stable page dirty in KSM In-Reply-To: <1445236307-895-6-git-send-email-minchan@kernel.org> Message-ID: References: <1445236307-895-1-git-send-email-minchan@kernel.org> <1445236307-895-6-git-send-email-minchan@kernel.org> User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Signed-off-by: Hugh Dickins --- 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);