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 A075FCA0FE6 for ; Fri, 1 Sep 2023 04:09:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0873D8D0017; Fri, 1 Sep 2023 00:09:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0383E8D0002; Fri, 1 Sep 2023 00:09:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E687E8D0017; Fri, 1 Sep 2023 00:09:51 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id D74248D0002 for ; Fri, 1 Sep 2023 00:09:51 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 971AAA0100 for ; Fri, 1 Sep 2023 04:09:51 +0000 (UTC) X-FDA: 81186700182.14.48657F2 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf14.hostedemail.com (Postfix) with ESMTP id EF72610000A for ; Fri, 1 Sep 2023 04:09:49 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=ib6CR816; spf=none (imf14.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1693541390; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ymmMJ5hm6xKI5/NpL6XSXR1nHa9HVgif2FzoKh65vME=; b=D/t3WrXteAkz7mRnyVZnrJAzCWfj4dNUjCy8MS3fVKdlkRdkZz0Sf2cmrYvhWiOLI7tP3T NR0+HSLSN2LOymKIJfrnlRJDxVirR2tsNjh0LB1ZS+G0iFEKgJAUwrUCkmHTS5niIye9Zx TX1FOywV9b6mJvCy71ltrX+z0m/+oQs= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1693541390; a=rsa-sha256; cv=none; b=JOW2juEd43tccIQlfHzssRu+mKPzpiw8MADAgcY+x/QxOsASYeNFWeJqDhnpw85fRSUnTi gA5ZbaAEK8xGS9lIQKfU7VphGwLNsFFDsY80RAI1cDhuM3+PsRJUGJrWoaG5bbBMomdfIq iTJJI4qJNTBxE4Ayy8dltEpVNO/A7Mg= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=ib6CR816; spf=none (imf14.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=ymmMJ5hm6xKI5/NpL6XSXR1nHa9HVgif2FzoKh65vME=; b=ib6CR816vmaMD8QLJToYuOu/+s 90V73+ZYpkBSN3n6pWzGirn/NH8gb8vhG4vVFNfhnZZkSlQ2cxFioqWGMrzfgVMnG4IzMYNjQvf34 KgL028c4BEarGzKG9hlItOUuF3iD2fwbFDvMhXIlxRh0XyOwpMqZWmeABJtc3JbQqTv//Ggk2iORx LeQ1cyCZIqV467gJXGvIf2D+AXX+/6nlkcL+/LMDLXoz7rwYcTdoEAt+wUIECiyYWeuRx/YDvSWS/ 0FtU/0pgk2m+WW2nSOnlHAdXy1KpFuvIfBU2mgxx/eTgSSZ1GcAdna9oTx+vh8asBhoBNJqZ0xYDu QVvQMn5A==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qbvTf-005KFe-GB; Fri, 01 Sep 2023 04:09:47 +0000 Date: Fri, 1 Sep 2023 05:09:47 +0100 From: Matthew Wilcox To: Ryan Roberts Cc: linux-mm@kvack.org Subject: Re: [RFC PATCH 09/14] mm: Handle large folios in free_unref_folios() Message-ID: References: <20230825135918.4164671-1-willy@infradead.org> <20230825135918.4164671-10-willy@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: EF72610000A X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: i7doo8ss1sd8hr6jzqg9nhfdtx5rimsb X-HE-Tag: 1693541389-773503 X-HE-Meta: U2FsdGVkX1+9R09ZbUvMUBgcy55rPgsAQiSnh5wJIECGYBTagAfEfx2blKrgylZGDNPEet1wUNYx2kTgEz0yJqHEf2YTAz8AvKQOdyc/BtYOT+ZoQN34Ev6Qr9lNuDziEsKpYjSJbjqqYvvr0VzMG9G0BAR2e4M6pq/zb0LJdXbv8Lwo1CjLijmBvL/M+XcT3X/VFhcukDtdv2PLo17VBK8Rsb2fUeI7DAIvMxTIeIl+OOwj3t6akIgsh0CJGeXRfLcIoUTFWq8OpsVCwHIBYS8iGG0nTgI7qyChTdDKbxfzST7SiEKpHtfY1kzNTNdAR5ysTbut+ZcPN0XA276sBpOMdGi8oBEUWlppxYuprjjo3KIEVbn6b0M8lHdp+nPnLbpW4C/n3s7H+eeptOi/P2Rzcvn1mZwdXeTBVOexfpNyLn9yOG48xgdl0Y2WwjPH0jhcKy+QpuJDU3h+8QmRedSfmo49ET5HU+7T/p+yLZBFclibdVJNqfUVZXE65b/XUSlkSUmFoxWCfv21x/RxQfCc3MFhG7kF+qYFPYrUcvDKrs9qjhvcNg6GQ8Td/6hZhkFniUEYxHwHSlgUDhkdUFtOu5JTmZhWAOOwISQklL8MzYbnz7Dm31Wpy78PhkQamDcmY0TllmZh0+qqawDbH4rVr4/qpTcoq7SI/wJmc9loyErfOsynXyZ5wKu2e/EHA3Ahq+z9BC4aZAAHSV4ch1gDiDMBqvA+bxYanL+Rs2uzui0IVhnx/GHptrykpOjseou6zZU/TaCCFdjbPtoEQmsB4s/ZMDewrDbH4ILLE77gUq5HhENu0I9/c/0Rukrj/H3LU7VZfCUYafFYI1E9WRuyR+LCI2ANupKJ7m7zfOfdQpVysOW4mhZgo9HJ/E3ERokXivK9rauLZa8GQtJjQOP5SgLOpPW34cWixPOj677+AZ3egKJtggzKy/8o/ynZdQXd0LR6OoajK1Sw1Q0 rr7kHuv7 LA8A4Vn6TsgbkpdygMebk08s/RHARl2tcF5p1sxpGz3JfZ4SHVrcXePmBN9r76QWpajovEVLoF4RKRm1jiKbly7DDgb0MU/VoR+6Jvz/Rohh0B6UhUu3vGpD+HgNG5EKpdDoTWTbw92G2+JIzOrHfpLUB6Bh3UDlT/Ql6CK30GzcdwOCc2oCZICewPQ== 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 Thu, Aug 31, 2023 at 04:21:53PM +0100, Ryan Roberts wrote: > On 25/08/2023 14:59, Matthew Wilcox (Oracle) wrote: > > @@ -2478,7 +2478,11 @@ void free_unref_folios(struct folio_batch *folios) > > for (i = 0, j = 0; i < folios->nr; i++) { > > struct folio *folio = folios->folios[i]; > > unsigned long pfn = folio_pfn(folio); > > - if (!free_unref_page_prepare(&folio->page, pfn, 0)) > > + unsigned int order = folio_order(folio); > > Do you need to do anything special for hugetlb folios? I see that > destroy_large_folio() has: > > if (folio_test_hugetlb(folio)) { > free_huge_folio(folio); > return; > } Right; hugetlb folios get freed specially and never come this way. I could put in an assertion, I suppose? > > @@ -2486,11 +2490,13 @@ void free_unref_folios(struct folio_batch *folios) > > * comment in free_unref_page. > > */ > > migratetype = get_pcppage_migratetype(&folio->page); > > - if (unlikely(is_migrate_isolate(migratetype))) { > > + if (order > PAGE_ALLOC_COSTLY_ORDER || > > Should this be `if (!pcp_allowed_order(order) ||` ? That helper includes the THP > pageblock_order too. Oh, yes, that's obviously far better than what I had here. I got the BUG in order_to_pindex() and didn't think to look around for the correct predicate. Thanks!