From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CDA1AC43387 for ; Wed, 26 Dec 2018 05:37:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 96E6221720 for ; Wed, 26 Dec 2018 05:37:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726009AbeLZFhZ (ORCPT ); Wed, 26 Dec 2018 00:37:25 -0500 Received: from mga03.intel.com ([134.134.136.65]:39016 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725889AbeLZFhZ (ORCPT ); Wed, 26 Dec 2018 00:37:25 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Dec 2018 21:37:24 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,399,1539673200"; d="scan'208";a="109980284" Received: from yhuang-dev.sh.intel.com (HELO yhuang-dev) ([10.239.13.10]) by fmsmga007.fm.intel.com with ESMTP; 25 Dec 2018 21:37:22 -0800 From: "Huang\, Ying" To: Andrew Morton Cc: , , Rik van Riel , Johannes Weiner , Minchan Kim , Shaohua Li , Daniel Jordan , Hugh Dickins Subject: Re: [PATCH] mm, swap: Fix swapoff with KSM pages References: <20181226051522.28442-1-ying.huang@intel.com> Date: Wed, 26 Dec 2018 13:37:22 +0800 In-Reply-To: <20181226051522.28442-1-ying.huang@intel.com> (Huang Ying's message of "Wed, 26 Dec 2018 13:15:22 +0800") Message-ID: <8736qku9v1.fsf@yhuang-dev.intel.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=ascii Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Andrew, This patch is based on linus' tree instead of the head of mmotm tree because it is to fix a bug there. The bug is introduced by commit e07098294adf ("mm, THP, swap: support to reclaim swap space for THP swapped out"), which is merged by v4.14-rc1. So I think we should backport the fix to from 4.14 on. But Hugh thinks it may be rare for the KSM pages being in the swap device when swapoff, so nobody reports the bug so far. Best Regards, Huang, Ying Huang Ying writes: > KSM pages may be mapped to the multiple VMAs that cannot be reached > from one anon_vma. So during swapin, a new copy of the page need to > be generated if a different anon_vma is needed, please refer to > comments of ksm_might_need_to_copy() for details. > > During swapoff, unuse_vma() uses anon_vma (if available) to locate VMA > and virtual address mapped to the page, so not all mappings to a > swapped out KSM page could be found. So in try_to_unuse(), even if > the swap count of a swap entry isn't zero, the page needs to be > deleted from swap cache, so that, in the next round a new page could > be allocated and swapin for the other mappings of the swapped out KSM > page. > > But this contradicts with the THP swap support. Where the THP could > be deleted from swap cache only after the swap count of every swap > entry in the huge swap cluster backing the THP has reach 0. So > try_to_unuse() is changed in commit e07098294adf ("mm, THP, swap: > support to reclaim swap space for THP swapped out") to check that > before delete a page from swap cache, but this has broken KSM swapoff > too. > > Fortunately, KSM is for the normal pages only, so the original > behavior for KSM pages could be restored easily via checking > PageTransCompound(). That is how this patch works. > > Fixes: e07098294adf ("mm, THP, swap: support to reclaim swap space for THP swapped out") > Signed-off-by: "Huang, Ying" > Reported-and-Tested-and-Acked-by: Hugh Dickins > Cc: Rik van Riel > Cc: Johannes Weiner > Cc: Minchan Kim > Cc: Shaohua Li > Cc: Daniel Jordan > --- > mm/swapfile.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/mm/swapfile.c b/mm/swapfile.c > index 8688ae65ef58..20d3c0f47a5f 100644 > --- a/mm/swapfile.c > +++ b/mm/swapfile.c > @@ -2197,7 +2197,8 @@ int try_to_unuse(unsigned int type, bool frontswap, > */ > if (PageSwapCache(page) && > likely(page_private(page) == entry.val) && > - !page_swapped(page)) > + (!PageTransCompound(page) || > + !swap_page_trans_huge_swapped(si, entry))) > delete_from_swap_cache(compound_head(page)); > > /*