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 EB55BC433F5 for ; Wed, 5 Jan 2022 08:44:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8275A6B0071; Wed, 5 Jan 2022 03:44:45 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7D7306B0073; Wed, 5 Jan 2022 03:44:45 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 62A6E6B0074; Wed, 5 Jan 2022 03:44:45 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0002.hostedemail.com [216.40.44.2]) by kanga.kvack.org (Postfix) with ESMTP id 5174F6B0071 for ; Wed, 5 Jan 2022 03:44:45 -0500 (EST) Received: from smtpin10.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 05B75884A6 for ; Wed, 5 Jan 2022 08:44:45 +0000 (UTC) X-FDA: 78995597730.10.08101F7 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2074.outbound.protection.outlook.com [40.107.94.74]) by imf21.hostedemail.com (Postfix) with ESMTP id 275BA1C0008 for ; Wed, 5 Jan 2022 08:44:37 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EUGqhg0BgdmTHJIWgs+R0cpHTEk2i4ID73dBs2jzCLkj1l42keRN5PgN5Qc34DZ/4W+ieZuDEA8NKavmpvCcL2vUykuMahSgoiH3v8I6GHLuJnAF3uWasUHDYzeCOZI/geroGkzOq45rkiK/wW1YdKg/+I4i9spX+oFzcN/157TgujUXd6QJW9yJA1pN8JBrTYBt+ugeqA9XmE+BmBHhEHERppwzknIVwWeIqUob5xyl2O6gVCtx0bPcKx7l1rlpOongsVSS8I+dTAMM+rSW4J3x85FjEqamyxHt7rT7wqi+WJ8Y2qCIwb9baqxsVCdAgDq6F2YRxK/D0xwP7Q4jXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Yaf3N3545pQqmCjqlvMK/eDfNjB5gawQz9R4CekTDjE=; b=WbWslkz3Z+uWqO69TDpby3ANcoDoWkxJG/Bjb2XjpDNSJkYTH4plV4sk7/7g6zixT5jeqU+T4QzhQcvNO+2pj58RRR3KWp1SpXMeUWxC+P5zZpAkHFxy6eE44j3V3wxMwWfaaOTk42T9o7mFP3yae1SLkKbioL5UzenBIZpFNfP1VBdj4S5e2A/CshH8awchAy5LHxmfe4vWxJQCpXKaiyp4J+QZmhwijsXrIjuj5TdO1rlYDl3Dc95l01hTVEtmo4YcTHdJ9SRlZOnRsWncg0EKq8MLAPP8LflDC+o+7r6EavlSAnVI/ES56CyPb+tucbbjOD0gzwH57NmLHuFodA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Yaf3N3545pQqmCjqlvMK/eDfNjB5gawQz9R4CekTDjE=; b=CQWYhv5n8kf03UHuZ44qgvNb5tOhu5YK8eYxdeGlGrSfwFkL6xYMlQANuHX6lf1nhwPhrv8EulI9mhMg2ymrDkKYSQY8FMaikErKLVnueyzJT5OfTDpBZaq0/+apetjpfEkUwElYY8A3urjD4Q+ztdFO/TBmDWLYLoSqWwY+UiCp+qnH3p/NXUt0ujXYfJvJKptXw9O6CrnEoitDhPzzcFVY8sMic981+yy9fp1MWtJ/IbqLtgmoOrsrxVyB3bAwRnL2r1kKucKyQaisMKJAc1FSTkcL26hmIFGDw26AoY4i6x5id64cgETlsnclyLNfOPB2oEdkqUbu+pSDS7U4Lw== Received: from BY5PR12MB4130.namprd12.prod.outlook.com (2603:10b6:a03:20b::16) by BYAPR12MB3414.namprd12.prod.outlook.com (2603:10b6:a03:aa::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Wed, 5 Jan 2022 08:44:40 +0000 Received: from BY5PR12MB4130.namprd12.prod.outlook.com ([fe80::8496:16fd:65c5:4af7]) by BY5PR12MB4130.namprd12.prod.outlook.com ([fe80::8496:16fd:65c5:4af7%4]) with mapi id 15.20.4844.015; Wed, 5 Jan 2022 08:44:40 +0000 Message-ID: <1f3aaaca-052b-704b-aa72-5f19cf8038fa@nvidia.com> Date: Wed, 5 Jan 2022 00:44:38 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: Re: [PATCH 16/17] mm: Add isolate_lru_folio() Content-Language: en-US To: "Matthew Wilcox (Oracle)" , linux-mm@kvack.org Cc: Andrew Morton References: <20220102215729.2943705-1-willy@infradead.org> <20220102215729.2943705-17-willy@infradead.org> From: John Hubbard In-Reply-To: <20220102215729.2943705-17-willy@infradead.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: SJ0PR03CA0187.namprd03.prod.outlook.com (2603:10b6:a03:2ef::12) To BY5PR12MB4130.namprd12.prod.outlook.com (2603:10b6:a03:20b::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3dd0dd92-66c4-444e-b29d-08d9d0279ca8 X-MS-TrafficTypeDiagnostic: BYAPR12MB3414:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Li2tha/pdTal0ka9qIZ/fB2S4aYZwgDRBz2nVg6qFAudA6hEUxDBIko4whYDsCAWUiYoyqf7lSM+iZk0+hcCaCPtr0ApLsmD0iCfqRK2FNbnCAm6Fa8ThxbBW/A8MDKok/siZ2HboFXjLEO6uZTklJx1d+PIKzUInrGUjctPEjtrxz7jY1RhvkEjSBRAHgh/Ca5Jwmr58mlNRFpYLziFvueYxcVQjJ6G4ruwZm7UkCnGI4clEZSmYpACxnKerlIybT8Ty+NwiSGEeREUV7L3KJ1M7VmfMqnbwIvEV5p8kWOOW3f325oKan8DVstFVRNL0F22JPnduHssGUw6gB+irdNu35i3iWRATcAkiTKFJAIZVhSJ5+U7G5UAoJuUsR9kvNOeaOezUK1O4bpAlM4YqX+/A0CzeznyqfzMG7eLh6OFCr6in3e2bbDo7ja+irkrYAbRCaePKK/QWIjy3FquZLNpdeuPWyhl7v8xfI0fYMZtkUqYEXBl0vaEjNNk0cg3BT6El9eHimi2dnec7LBVfSI33IpXGu/nrpm8HYJwVoumzaSFkAcMHFmMpM9XY68VcjWh5kRgIP7PA8rwfsZXY1+tGdXnMwLjbd6I4wAY0tlycC4N91QmIO8GcHfibOtbbKFcx1vUeEHJA1zm6RzB/LugMtopsD2m41Irsea2o9hVwl6EX3rEZ+MDBNbSd+kCslfFe4aTZ8TviC4Q2XrZNlfXv/WLa9tLlqxqjWUvxSk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR12MB4130.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(8936002)(66556008)(508600001)(31686004)(5660300002)(66476007)(36756003)(66946007)(8676002)(38100700002)(31696002)(4326008)(2906002)(2616005)(86362001)(316002)(83380400001)(6486002)(6506007)(53546011)(26005)(186003)(6512007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VlhzSzVWNWxBV1dobDREcGxIem44SStNOFEyOTZLaCtmanRoUkRoNHovSDkr?= =?utf-8?B?UlRVMUJVTHR2bXBCTW1CMy9aWURMM0orUnpVd2ZIK1pxdE5nN1pKV2VmZ2RQ?= =?utf-8?B?WXhBbHNyWVBiRktaVzVEeGEzcTVhMzNORjYwMng1OXcwM1g2N010aWY3czNo?= =?utf-8?B?UUJVYU1WRlZHRWQ1bzV1UmFKYk12YWdaejJ5VTRwbk5kejA0ci91aFI3MW9Z?= =?utf-8?B?MXhGZFZ6WkxvcG1heGhjQkZSV25nMVgyb21VenRQOTU2OHBpWHJtV2g2TTFh?= =?utf-8?B?YmQyYkRHVU5OUjlmd3hIWnpvVmZMb0FoNzEyY2wyYkhPUmZPQURPVjBsa2da?= =?utf-8?B?emRVTlhtalY0eS85ZUJ5c09maVNuM2g3RzhCZUpDS2d3MkdjcDQrOTJUQ1lQ?= =?utf-8?B?cXNMQnZBUkVXdVRFcjB3TTR0ZWlPd2VtcFZvMDlmS3NCU3BKMjN0TjBIdzRU?= =?utf-8?B?S0I0YXd0S25ETGVoWVM5QzhyQ2lKTkg2OTJad2NvQnBQY1FkdWdScVNmalcy?= =?utf-8?B?RHd4d3VEVnBPSHYvNjZkUWFLMjVxYW1QTnhIdTBDNXc5Mzk3V1AwV1o3WitM?= =?utf-8?B?VjY5NkV1V01sMWJRUEdlanRIby9WUXRrdmVMNDN1cFo5UkxZS2lvTEdHWVh1?= =?utf-8?B?STl3eHZ1Wko5dC85Z0JQU0tsY2w2dml6U1dHMGNyQytEOEs5RWZjbGlnamkz?= =?utf-8?B?MlZsWS9Rd3hvMTVJMG44MDFtSDZKVjJmZzFscUNiYldHOE5lcmJvWXRIWlRL?= =?utf-8?B?elkxUnU5YTU3aHlZQUdkMThYMm52SVNCMlI3dGVJT1dTQlRUMEdTd0FEMnhy?= =?utf-8?B?SFY2R2d4cmpYV2dqaElKbzVjMlJYN2tObk14L0ZTNDI1K3VWbTlxY2Zselll?= =?utf-8?B?alFLeDV2akZ6MXhJMStaVDRST2hkZmpwaEkvTWFITExUdzBsWG9HOW40QTlu?= =?utf-8?B?ZGNndDlXUnc3MWlTbUthK2o4UDhoR2VPbHYzRTNpVUwyd3QzWGI3NTlMa0JU?= =?utf-8?B?Ylc4Um1vOEZBNHVLc0lTbmFTbTNkVzhlazNTZHh0S3JSUnBnMi8wekREV3Fu?= =?utf-8?B?OXlRbk9EcjlzN0JhbmNQYzlHaTRHazRpOVhXVEZwc0U5bGtIV0hqbUNKejdW?= =?utf-8?B?SFlYYVliVlltNDdWQnFRRUlwNzByb3JZV3p3MU8yUUpHUjRIeE12eWhtd2xQ?= =?utf-8?B?eXlJLy9IZXNCQ2x5QXVIelFJaHVTZGhNVVhYMldLVVFVWVcxR1Qza1N0SzFo?= =?utf-8?B?U1M3bS82emZMb3lhclVWV0ZsY0paZC9rQzl0d0RnN1VYWWRlL0dOa0JheVRz?= =?utf-8?B?dmJTdjdJeDNpbUo3MmdlUEtNY1dLUUUwYXFua0xuZXJVdGY1UGJ0eDVITlRF?= =?utf-8?B?Y2ExTmdNUG5nRWw3N2NXMmR4dGNNb3QvWko1UnpsRVV6YURFdndRQXpPTFRM?= =?utf-8?B?ais3T3g4UnpGWHo4cUo5ZytRMFdRMXB6NW9pM0tTNkNxeENENWtVMGdUUzRQ?= =?utf-8?B?ZktyYkllWXFZdjhtSXp2cCtsRktORW9xMDBkYXJJUEZ4R3BFSXNFRUt2R2VK?= =?utf-8?B?MTc1TmlUVnpJamUrRVdONnNQbFo3bUxRcFhvWU9qdjd3UHRFU1kzd1VYdGw2?= =?utf-8?B?RG9BQWhGRnpCWFBnR3hFMzBvMWMwSVVQMmsxQ2FTcE0rbmo1ZUswaDRTVnRi?= =?utf-8?B?bGlEbkpzVDVOL1pYZ0dXVG5IZ0NVVEc4TnlJZzN2b295ckdQd0Y3OXF1NmlL?= =?utf-8?B?T3RuNlRXZm1SNU5LOEVHaEd6NGNFampoaURubmplUFhnK0JnTjJMM3dEYTlC?= =?utf-8?B?RitxUGluS2xjUzlyVjlHQ21HYmpDQlpNMHIwMWhxalpoandDeXcwM1poQ3hZ?= =?utf-8?B?MitsNmlOcExMVG93ZDhUd0szNlVDSUxkR3dPTW96dlJOdVVDNzUzWkZ0UTlH?= =?utf-8?B?TnAwWllGYUh1c3pUczluL09LdHY5VmFjMnd5am1vOW5aL1k3Y3BaSkxzczZJ?= =?utf-8?B?N0grZTZvaUFoeHpyZ1JUdEY1bVZwbzZ0czFucGhOOFREb3Zpd2FaR0Q5WDN2?= =?utf-8?B?RXY1Z2VZeElLeTFSUitra3EzNWxJWEVJYlhQdjVkZ1RCVC9UZXI1YlIvbkFm?= =?utf-8?B?dmtxWllOMnRaaTNFWTF6VHltWndwNk55UXVxNUd0Z2lUY2N5UkhyRFNZTGJS?= =?utf-8?Q?RAAGXhcKa4JOxfffnfqaakw=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3dd0dd92-66c4-444e-b29d-08d9d0279ca8 X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB4130.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jan 2022 08:44:40.2583 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: cFcgbAAcDfLZKUQCMd4OW3fGpjxR4xhJZAZ2ND1TDmRrP8ERCWsggB1TsBz+ERNlTUC14rJIvPNiCZ2/yYMVlA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR12MB3414 Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=CQWYhv5n; dmarc=pass (policy=reject) header.from=nvidia.com; spf=none (imf21.hostedemail.com: domain of jhubbard@nvidia.com has no SPF policy when checking 40.107.94.74) smtp.mailfrom=jhubbard@nvidia.com X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 275BA1C0008 X-Stat-Signature: uohy4php5xe35tdciy5cy1pojm4p3aqy X-HE-Tag: 1641372277-628666 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: On 1/2/22 13:57, Matthew Wilcox (Oracle) wrote: > Turn isolate_lru_page() into a wrapper around isolate_lru_folio(). > TestClearPageLRU() would have always failed on a tail page, so > returning -EBUSY is the same behaviour. > > Signed-off-by: Matthew Wilcox (Oracle) > --- > arch/powerpc/include/asm/mmu_context.h | 1 - > mm/folio-compat.c | 8 +++++ > mm/internal.h | 3 +- > mm/vmscan.c | 43 ++++++++++++-------------- > 4 files changed, 29 insertions(+), 26 deletions(-) > > diff --git a/arch/powerpc/include/asm/mmu_context.h b/arch/powerpc/include/asm/mmu_context.h > index 9ba6b585337f..b9cab0a11421 100644 > --- a/arch/powerpc/include/asm/mmu_context.h > +++ b/arch/powerpc/include/asm/mmu_context.h > @@ -21,7 +21,6 @@ extern void destroy_context(struct mm_struct *mm); > #ifdef CONFIG_SPAPR_TCE_IOMMU > struct mm_iommu_table_group_mem_t; > > -extern int isolate_lru_page(struct page *page); /* from internal.h */ > extern bool mm_iommu_preregistered(struct mm_struct *mm); > extern long mm_iommu_new(struct mm_struct *mm, > unsigned long ua, unsigned long entries, > diff --git a/mm/folio-compat.c b/mm/folio-compat.c > index 749555a232a8..782e766cd1ee 100644 > --- a/mm/folio-compat.c > +++ b/mm/folio-compat.c > @@ -7,6 +7,7 @@ > #include > #include > #include > +#include "internal.h" > > struct address_space *page_mapping(struct page *page) > { > @@ -151,3 +152,10 @@ int try_to_release_page(struct page *page, gfp_t gfp) > return filemap_release_folio(page_folio(page), gfp); > } > EXPORT_SYMBOL(try_to_release_page); > + > +int isolate_lru_page(struct page *page) > +{ > + if (WARN_RATELIMIT(PageTail(page), "trying to isolate tail page")) > + return -EBUSY; > + return isolate_lru_folio((struct folio *)page); This cast is not great to have, but it is correct, given the above constraints about tail pages...and I expect this sort of thing is temporary, anyway? Reviewed-by: John Hubbard thanks, -- John Hubbard NVIDIA > +} > diff --git a/mm/internal.h b/mm/internal.h > index e989d8ceec91..977d5116d327 100644 > --- a/mm/internal.h > +++ b/mm/internal.h > @@ -178,7 +178,8 @@ extern unsigned long highest_memmap_pfn; > /* > * in mm/vmscan.c: > */ > -extern int isolate_lru_page(struct page *page); > +int isolate_lru_page(struct page *page); > +int isolate_lru_folio(struct folio *folio); > extern void putback_lru_page(struct page *page); > extern void reclaim_throttle(pg_data_t *pgdat, enum vmscan_throttle_state reason); > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index fb9584641ac7..ac2f5b76cdb2 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -2168,45 +2168,40 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, > } > > /** > - * isolate_lru_page - tries to isolate a page from its LRU list > - * @page: page to isolate from its LRU list > + * isolate_lru_folio - Try to isolate a folio from its LRU list. > + * @folio: Folio to isolate from its LRU list. > * > - * Isolates a @page from an LRU list, clears PageLRU and adjusts the > - * vmstat statistic corresponding to whatever LRU list the page was on. > + * Isolate a @folio from an LRU list and adjust the vmstat statistic > + * corresponding to whatever LRU list the folio was on. > * > - * Returns 0 if the page was removed from an LRU list. > - * Returns -EBUSY if the page was not on an LRU list. > - * > - * The returned page will have PageLRU() cleared. If it was found on > - * the active list, it will have PageActive set. If it was found on > - * the unevictable list, it will have the PageUnevictable bit set. That flag > + * The folio will have its LRU flag cleared. If it was found on the > + * active list, it will have the Active flag set. If it was found on the > + * unevictable list, it will have the Unevictable flag set. These flags > * may need to be cleared by the caller before letting the page go. > * > - * The vmstat statistic corresponding to the list on which the page was > - * found will be decremented. > - * > - * Restrictions: > + * Context: > * > * (1) Must be called with an elevated refcount on the page. This is a > - * fundamental difference from isolate_lru_pages (which is called > + * fundamental difference from isolate_lru_pages() (which is called > * without a stable reference). > - * (2) the lru_lock must not be held. > - * (3) interrupts must be enabled. > + * (2) The lru_lock must not be held. > + * (3) Interrupts must be enabled. > + * > + * Return: 0 if the folio was removed from an LRU list. > + * -EBUSY if the folio was not on an LRU list. > */ > -int isolate_lru_page(struct page *page) > +int isolate_lru_folio(struct folio *folio) > { > - struct folio *folio = page_folio(page); > int ret = -EBUSY; > > - VM_BUG_ON_PAGE(!page_count(page), page); > - WARN_RATELIMIT(PageTail(page), "trying to isolate tail page"); > + VM_BUG_ON_FOLIO(!folio_ref_count(folio), folio); > > - if (TestClearPageLRU(page)) { > + if (folio_test_clear_lru(folio)) { > struct lruvec *lruvec; > > - get_page(page); > + folio_get(folio); > lruvec = folio_lruvec_lock_irq(folio); > - del_page_from_lru_list(page, lruvec); > + lruvec_del_folio(lruvec, folio); > unlock_page_lruvec_irq(lruvec); > ret = 0; > }