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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id EEB01C54FA6 for ; Wed, 28 Aug 2024 12:36:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8524A6B008A; Wed, 28 Aug 2024 08:36:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8024B6B008C; Wed, 28 Aug 2024 08:36:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6F19D6B0092; Wed, 28 Aug 2024 08:36:13 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 52D7B6B008A for ; Wed, 28 Aug 2024 08:36:13 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id EE53DA1F28 for ; Wed, 28 Aug 2024 12:36:12 +0000 (UTC) X-FDA: 82501601784.14.48FB36B Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by imf18.hostedemail.com (Postfix) with ESMTP id 8E2F91C0016 for ; Wed, 28 Aug 2024 12:36:09 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf18.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.188 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1724848484; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=de2MrxWBBZf74sqqHY6wQEZMEfz6YJihGiB36O2q8Eg=; b=v/eYWbSUuo2By/mZ70/Yf6dQTlI/CfSqu6QGool+Kt6hsj+SNb0NKvKATJj0QIGHR0WZ5g F43G/0lEPTaQv1o+1FGvTIHwLoBCrEdeH3Pr1jCBtHlfYounjVp980cpzhcx3pPCoYHMPb kbIbXy8nMN802tkxX+qOjnfLueyTMrs= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1724848484; a=rsa-sha256; cv=none; b=Cf7Y+SWSP+BhRlXDQbnn0l27JfPzr0VU+tnekq5ygrxGJbs3mFyzUnr99T8xn1zrU7MO/s vsYDq2H090PHjNZDuxp+ICAXoCS00Krf+kPP7E1tqpKgaN4OeAStgki9qEsiUVu2YzZQ7O VyhonzE4EBcrKTw65t6ztzapk4hfVOI= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf18.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.188 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com Received: from mail.maildlp.com (unknown [172.19.88.194]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Wv3kk2sKwzpTtX; Wed, 28 Aug 2024 20:34:22 +0800 (CST) Received: from dggpemf100008.china.huawei.com (unknown [7.185.36.138]) by mail.maildlp.com (Postfix) with ESMTPS id 86F4B140118; Wed, 28 Aug 2024 20:36:04 +0800 (CST) Received: from [10.174.177.243] (10.174.177.243) by dggpemf100008.china.huawei.com (7.185.36.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Wed, 28 Aug 2024 20:36:04 +0800 Message-ID: <606adde7-44ff-476a-bd01-2141eb28943e@huawei.com> Date: Wed, 28 Aug 2024 20:36:03 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/4] mm: compaction: convert to folio_isolate_movable() Content-Language: en-US To: Baolin Wang , Andrew Morton CC: David Hildenbrand , Matthew Wilcox , Zi Yan , References: <20240826040132.1202297-1-wangkefeng.wang@huawei.com> <20240826040132.1202297-3-wangkefeng.wang@huawei.com> <3f8300d9-1c21-46ad-a311-e97dc94eda08@linux.alibaba.com> From: Kefeng Wang In-Reply-To: <3f8300d9-1c21-46ad-a311-e97dc94eda08@linux.alibaba.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.174.177.243] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpemf100008.china.huawei.com (7.185.36.138) X-Rspamd-Queue-Id: 8E2F91C0016 X-Stat-Signature: xyt39655tsfh67jzymjpbc934nfo3x46 X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1724848569-565610 X-HE-Meta: U2FsdGVkX18FS799G/1K0pbZz0Ot+SGMCNHnKFpHQ/lzZEiEO/e1KKqVFbLZXHFbvN5prADPsKwhaiK/BzX9hSReYoBtcrxiS88Gp++HhMSx3jmhQOsXT/vUHaP+90Zb5k/OZJFbZrfs922wbkQe172wpU3B/4sH47hkQXAdomBlIDK5CRziYgLMjty2F/+P/rPPwtV//w7KYQanHEMa0MLpn7QNZt/lBpg+5ce192hCTd2xqBMv+pwPvWnEuJZqPP2fWiyyKDUWfRtSWCnOk94mlr9iiSKcvasozF6eJDwz/4/ZY/tLX6XQCOWfa/zpUM2YMV7dKtDpn6iscaX3Yo7OTvdKoHGNO5qAGh+IjY6SwWof70j/RlWM1Oi2s6tdwoDU98uHw//W6GDtfmU1m/bR64mWv0xhna8dtZO4IYO0SZ6mzh+1lqQBC9J6ZNAb0bZRHr1rnVNOyclOpD/UYAr7dVRG8KG0xjQimcORSG9pqcqMTDmT5Y1zm85v3XDq7SRizSbVPrh8V68sQlbCue/ICRMzD4BXmUaBtnZNiJ+lkdo1w71OQjcDm32uh2/ygaY/iTzPUbEszHz+1kq2HZsjyzWupqTwodAppbjDpsWLxJYQf4UIHZqurLz6pq01+aWXnjJYcXaVerHxIKACzr4mqZ3kb3oopwzK3p3z1adD4yIXaSF0brgPGom51uLh1snw5iQOz8ZGX3NbS0JsAU8IGWFVjG2082ttMvdTsgPuU3cANi1p1OLeIqWSPKI/AVaHgHtWA6C4j0gFhPGuk1Dg4FIvdS5+0U3RoSWhpC2ClLW8S3sT+ULkmP34mA8RrKHpDhzfgMYR+cA8weyKibr2z8MUaKR7ghI2gPd0WLiixjFD5lZFGYuVgNdNwBPlTW259lNbA10NARPt6FZHZ9NujfJa15ago5YbcCcqO8+dFEhs576PRiETS36fE0/k9z7d7wW0kzgb9if+gmk Dl5pYTx4 b+aYTvLVkuNvHNiBpOMW/GfZPqyUIljbi2ZgYkIFdiDmv7JWu56mo/lMAshJRzm2oPheURAi7Isx0CcADA+2lsESjgKKAe6HHV8A+3QvSZ3PZ9T2im3jfeRozN+0uMNegYyj1jL4h0p8UGlI/p/EGTyFWc2L2vQACkm5Vg60BjDWdfFdk65xwt/vSqNzlql0KAMMrcOe9LOqG77DUTVPICprXTRWeWpowabmmKx2+HZQsKanncL1gv4FLu8a+hNkXlLHgx2WoerhRMAo= 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: List-Subscribe: List-Unsubscribe: On 2024/8/28 18:04, Baolin Wang wrote: > Hi Kefeng, > > On 2024/8/26 12:01, Kefeng Wang wrote: >> The tail page will always fail to isolate for non-lru-movable and >> LRU page in isolate_migratepages_block(), so move PageTail check >> ahead, then convert to use folio_isolate_movable() helper and more >> folios. >> >> Signed-off-by: Kefeng Wang >> --- >>   mm/compaction.c | 32 +++++++++++++++++--------------- >>   1 file changed, 17 insertions(+), 15 deletions(-) >> >> diff --git a/mm/compaction.c b/mm/compaction.c >> index a2b16b08cbbf..aa2e8bb9fa58 100644 >> --- a/mm/compaction.c >> +++ b/mm/compaction.c >> @@ -1074,39 +1074,41 @@ isolate_migratepages_block(struct >> compact_control *cc, unsigned long low_pfn, >>               } >>           } >> +        if (PageTail(page)) >> +            goto isolate_fail; >> + >> +        folio = page_folio(page); > > I wonder if this is stable. Before page_folio(), it does not hold a > reference on the page, so seems we should re-check the folio still > contains this page after gaining a reference on the folio? Oh, you are right, so two way to avoid this, 1) re-check 'page_folio(page) == folio', but this need change a little more. 2) directly use folio_get_nontail_page(page) here, and folio_put in the following path, this will try to get for any pages, but it should be accepted ? I'd prefer 2) but any other suggestion? Thanks. > >>           /* >>            * Check may be lockless but that's ok as we recheck later. >> -         * It's possible to migrate LRU and non-lru movable pages. >> -         * Skip any other type of page >> +         * It's possible to migrate LRU and non-lru movable folioss. >> +         * Skip any other type of folios. >>            */ >> -        if (!PageLRU(page)) { >> +        if (!folio_test_lru(folio)) { >>               /* >> -             * __PageMovable can return false positive so we need >> -             * to verify it under page_lock. >> +             * __folio_test_movable can return false positive so >> +             * we need to verify it under page_lock. >>                */ >> -            if (unlikely(__PageMovable(page)) && >> -                    !PageIsolated(page)) { >> +            if (unlikely(__folio_test_movable(folio)) && >> +                    !folio_test_isolated(folio)) { >>                   if (locked) { >>                       unlock_page_lruvec_irqrestore(locked, flags); >>                       locked = NULL; >>                   } >> -                if (isolate_movable_page(page, mode)) { >> -                    folio = page_folio(page); >> +                if (folio_isolate_movable(folio, mode)) >>                       goto isolate_success; >> -                } >>               } >>               goto isolate_fail; >>           } >>           /* >> -         * Be careful not to clear PageLRU until after we're >> -         * sure the page is not being freed elsewhere -- the >> -         * page release code relies on it. >> +         * Be careful not to clear lru flag until after we're >> +         * sure the folio is not being freed elsewhere -- the >> +         * folio release code relies on it. >>            */ >> -        folio = folio_get_nontail_page(page); >> -        if (unlikely(!folio)) >> +        if (unlikely(folio_try_get(folio))) >>               goto isolate_fail; >>           /*