From patchwork Wed Aug 17 08:14:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, Ying" X-Patchwork-Id: 12945631 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C1F5C25B08 for ; Wed, 17 Aug 2022 08:14:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 03B1C8D0008; Wed, 17 Aug 2022 04:14:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EDBCB8D0001; Wed, 17 Aug 2022 04:14:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D56128D0008; Wed, 17 Aug 2022 04:14:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id BD57F8D0001 for ; Wed, 17 Aug 2022 04:14:33 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 9584540837 for ; Wed, 17 Aug 2022 08:14:33 +0000 (UTC) X-FDA: 79808372826.04.EFAFAF5 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by imf01.hostedemail.com (Postfix) with ESMTP id D82F540061 for ; Wed, 17 Aug 2022 08:14:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1660724072; x=1692260072; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=MlvM1YeTzqz/XZ0HlO1MJjt5fs4jtidIiLiwDXYc78E=; b=Nb9whxfjeWAqQ39KJLyJHU2+odA18aCHNQWVv72UTrAIyQEzpiKZQH4H 6BeReGBAqlSbiqC2g4YV2Y0ewu8THtEEJ8vilgaFmuKCR0fcFRQUXtrO0 Mw/iMslBSb2luW+CsRSsygi2PJMk7JnIn5AryIUKgTcNsLwn6ZH67158R i088ZYNw/2TP7TRoi4k+P8kiMHMJp8XQeMTS1FkIYUaIrNAHMRZNKppRp vZyvtWSo6EfvKGjyzh5poSAeT1zQGuCPWw18ztSK5DXYrO2Htdup35mF0 3ZsM7dEKEUorLu4ylDXyFEnVKr+OY1/kCtmZVlZRCLF5hfDRxZyvAObZQ w==; X-IronPort-AV: E=McAfee;i="6400,9594,10441"; a="293710805" X-IronPort-AV: E=Sophos;i="5.93,242,1654585200"; d="scan'208";a="293710805" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Aug 2022 01:14:32 -0700 X-IronPort-AV: E=Sophos;i="5.93,242,1654585200"; d="scan'208";a="583668126" Received: from yhuang6-mobl1.sh.intel.com ([10.238.6.172]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Aug 2022 01:14:30 -0700 From: Huang Ying To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Huang Ying , Baolin Wang , Zi Yan , Yang Shi Subject: [PATCH -V3 5/8] migrate_pages(): fix failure counting for THP on -ENOSYS Date: Wed, 17 Aug 2022 16:14:05 +0800 Message-Id: <20220817081408.513338-6-ying.huang@intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220817081408.513338-1-ying.huang@intel.com> References: <20220817081408.513338-1-ying.huang@intel.com> MIME-Version: 1.0 ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1660724073; a=rsa-sha256; cv=none; b=nf3ujywp0xlqcYvnGLSSNC7TQmreMgcp96qwkDMY0vYsH7EiZJgFnEarKat6iFKHmQMZR5 Qe5IBmYXXF0J5TygObSicLSgATt1aqCdyxN4eNVQlDpW9MtogQC22c0yvLsDgyYrTXjq5m bnwFDlduUxyyfSZQjEQbL/KdxfzFz0o= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=none ("invalid DKIM record") header.d=intel.com header.s=Intel header.b=Nb9whxfj; spf=pass (imf01.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.65 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1660724073; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=rYbnGMlCuuC1ziCG1b20LFaHoSCb2dcImktp1rk/cdY=; b=GgTRgZhcMWh5Gqd38jsxffi296pcZs02mwSeFPABucuGDOavltKZ5hrgSO4Jj06QT7dTre CyOyU3+o1p7sDQ7VF9SWi4g/LhIfL5CWZy+SvhMp7g8SdmOzw1yVuJQuiAgnB4EBu5I+CQ UYQd7O7UvYex1vgPOd5+aYuswYeu6sY= Authentication-Results: imf01.hostedemail.com; dkim=none ("invalid DKIM record") header.d=intel.com header.s=Intel header.b=Nb9whxfj; spf=pass (imf01.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.65 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com X-Rspam-User: X-Stat-Signature: z7c5cwdxiikbcjk4ar4h9oygjjqn9dyo X-Rspamd-Queue-Id: D82F540061 X-Rspamd-Server: rspam06 X-HE-Tag: 1660724072-923069 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: If THP or hugetlbfs page migration isn't supported, unmap_and_move() or unmap_and_move_huge_page() will return -ENOSYS. For THP, splitting will be tried, but if splitting doesn't succeed, the THP will be left in "from" list wrongly. If some other pages are retried, the THP migration failure will counted again. This is fixed via moving the failure THP from "from" to "ret_pages". Another issue of the original code is that the unsupported failure processing isn't consistent between THP and hugetlbfs page. Make them consistent in this patch to make the code easier to be understood too. Signed-off-by: "Huang, Ying" Fixes: 5984fabb6e82 ("mm: move_pages: report the number of non-attempted pages") Reviewed-by: Baolin Wang Cc: Zi Yan Cc: Yang Shi --- mm/migrate.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mm/migrate.c b/mm/migrate.c index 0018b5191799..0223673e42d1 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1260,10 +1260,8 @@ static int unmap_and_move_huge_page(new_page_t get_new_page, * tables or check whether the hugepage is pmd-based or not before * kicking migration. */ - if (!hugepage_migration_supported(page_hstate(hpage))) { - list_move_tail(&hpage->lru, ret); + if (!hugepage_migration_supported(page_hstate(hpage))) return -ENOSYS; - } if (page_count(hpage) == 1) { /* page was freed from under us. So we are done. */ @@ -1460,6 +1458,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, * page will be put back * -EAGAIN: stay on the from list * -ENOMEM: stay on the from list + * -ENOSYS: stay on the from list * Other errno: put on ret_pages list then splice to * from list */ @@ -1489,6 +1488,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, } nr_failed_pages += nr_subpages; + list_move_tail(&page->lru, &ret_pages); break; case -ENOMEM: /*