From patchwork Thu Apr 10 18:00:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fan Ni X-Patchwork-Id: 14047116 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 5DF6AC3601E for ; Thu, 10 Apr 2025 18:03:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D363B6B033C; Thu, 10 Apr 2025 14:03:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CC27B6B034A; Thu, 10 Apr 2025 14:03:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ABE0C6B033E; Thu, 10 Apr 2025 14:03:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 7F36F6B033C for ; Thu, 10 Apr 2025 14:03:33 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id A2B2FC127E for ; Thu, 10 Apr 2025 18:03:33 +0000 (UTC) X-FDA: 83318906706.28.FDE0F9E Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) by imf14.hostedemail.com (Postfix) with ESMTP id A8E5C100007 for ; Thu, 10 Apr 2025 18:03:31 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=iHQ0UoHk; spf=pass (imf14.hostedemail.com: domain of nifan.cxl@gmail.com designates 209.85.210.176 as permitted sender) smtp.mailfrom=nifan.cxl@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744308211; 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:references:dkim-signature; bh=9KspzWYWRsyEbnP31/SlUBhB9lF2Qj2qHmHRt0zLbBU=; b=MltkWo6aBnkq7YmkwL5YEBix1mBW0Ovzt/pd63C2/n2FM9loGWp++wlSZF/tJM9wPooSK6 FpXoJ0qwDiMP53ya7baIHG6MVc8Pg4ozzhGR5Ar+QQXAi6osIM4I7dU4WmguGnx4w/kDsQ 6rEOrDqfrzXnBNHbJBk1bEv36LdqtO4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744308211; a=rsa-sha256; cv=none; b=CnSdTyMy4zL5srYDvfhZmDJQxZagwVZDab71BMYnscmwkO8EfZ++JCqE3OXx5L0316Omdb Bd4eWO6ICj0acLKjuR8AtItJll046o/3kjPtqAl5MTDh0FjrPO89tFKNCB22vRnEHKWW3V v8W827G77KjUWl6rLgnc/ug4tSOJ254= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=iHQ0UoHk; spf=pass (imf14.hostedemail.com: domain of nifan.cxl@gmail.com designates 209.85.210.176 as permitted sender) smtp.mailfrom=nifan.cxl@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-7390d21bb1cso1149586b3a.2 for ; Thu, 10 Apr 2025 11:03:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744308210; x=1744913010; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=9KspzWYWRsyEbnP31/SlUBhB9lF2Qj2qHmHRt0zLbBU=; b=iHQ0UoHkOIcMvw7hTQkuSBxmfgrmFF6x7jPelcCi+gVAtlqKxPcmZ557GHmkOeiejb uryoM9ZACSyQm/yvLlmOp+g4Ge53KmCL146+Iej5uJ1HuUXAOLfDS65qDW2zqtqOGL1e aqk/AE38uHYdl5Wbexd2aD/sZoL3yIDrypdCiEXEVh5jVGtPTZp7SRrFU/Zm+F3OnTTC Ts7AGpizkwq291pM1itPWqmA0o0joRQ1UWbnSs7dTqMosk0xFudydvlthauX92vwtIif gJKGP3zEqYCv9qZU1U8TSx0blKEadF3wz7Ja5Tfw9ljDINvdEyhl9+JZ8DNiSGrEOma+ t/lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744308210; x=1744913010; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9KspzWYWRsyEbnP31/SlUBhB9lF2Qj2qHmHRt0zLbBU=; b=ZhZcrh43QBcffRrYCRLOOYUfNUECvaKou6Ct9l4ebgZZbi7XEeONjstDnxI2SqqM+A apZjmGk8Lnnmv2oFzCoQYaqQUZA5GGE6i1zyxIU1KZvUzQcypkjOgR5PjCeSiaFBXyAc 4rTMlVD717IrJG+yMvzEqP9Le7eDNwWV16fvIepy/mKek62QNXJE4vPmNOVxZoZ8KVyr ct+vvYdThKFVGO5r0+aUWxC0daSbSreLnEqQE7MEG4OwXS6VB4kcbC/IdkpQazlYeREX tdV2u6DswHg7rKdGeU7N3XxwfOt1O14o+AsSbBJWzEsPZ6gr4KICP5NHV8cPmkbjuuEL bVJw== X-Forwarded-Encrypted: i=1; AJvYcCWJqBeL9rhI9dKAb+BuaC/d6Loo05QZKMrcJTyQo+JvF5HKl5RK0Wji/g/WhlIcdn9BJ12qoW4ZqQ==@kvack.org X-Gm-Message-State: AOJu0YwrsDmHvMOgtgs7GxQ+FQp4jkn61TftpEHHXr5+T45fUoGxpW2d MIpiZpQCU3THHy4M7jLBCgnQrf8ZNbBUia6lQzFvElJFbA5jjZ/yth+ntw== X-Gm-Gg: ASbGnctmS4jDWyETsKo9lH7SeiEVX4tp0ueuKwamxMy9klmdZqcK0DCzmLEkTWuVksc GkLyAfnzTE5Ziu7CVKdibzdd/ddZzKhoElycb6FBjgn1shSmzKmRau0w32k4861mTQJghgcLCkW 9wxb+P5vQ+XVm8yNo0dYpMJCmeIO9sBPqOvBBzj8QFcfoXwmParvCLXNWnefRDdu6BwPXvAbqIn E68pESj2mnmz5LHkF9AmUTQNud3Ap1b4B3meAj3p5ZWRP9/O1QkOeb++QNbNGO2wYYYWGVs7d7E jp4McrVEILB1qXZBftBe/Gda9vaYXgYALZDWLU+zGZbrmfGPiDVpjKtb X-Google-Smtp-Source: AGHT+IGo7HacaL/bCpYlsLvZ/r0cXH+aP5UU2jDrusuLV2kneGlhMHN7AVzvwnv/xHVzRUqpukB9ig== X-Received: by 2002:a05:6a00:801:b0:736:a82a:58ad with SMTP id d2e1a72fcca58-73bbefa623bmr4027239b3a.15.1744308210343; Thu, 10 Apr 2025 11:03:30 -0700 (PDT) Received: from localhost.localdomain ([2601:646:8f03:9fee:5e33:e006:dcd5:852d]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-73bb1d2b940sm3609697b3a.8.2025.04.10.11.03.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 11:03:29 -0700 (PDT) From: nifan.cxl@gmail.com To: willy@infradead.org Cc: mcgrof@kernel.org, a.manzanares@samsung.com, dave@stgolabs.net, akpm@linux-foundation.org, david@redhat.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, will@kernel.org, aneesh.kumar@kernel.org, hca@linux.ibm.com, gor@linux.ibm.com, linux-s390@vger.kernel.org, ziy@nvidia.com, Fan Ni Subject: [PATCH] mm: Introduce free_folio_and_swap_cache() to replace free_page_and_swap_cache() Date: Thu, 10 Apr 2025 11:00:31 -0700 Message-ID: <20250410180254.164118-1-nifan.cxl@gmail.com> X-Mailer: git-send-email 2.47.2 MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: A8E5C100007 X-Stat-Signature: dmjyto8htcw7kfxygu8hrwrpc4asxpw3 X-HE-Tag: 1744308211-632408 X-HE-Meta: U2FsdGVkX19nAdXIxaqSD/vL2DQUsgXy89jAL4Bs4XHIDpJ0XixvVGwfljqIE4FKYieBuIZ9LTO8EtQ7cB73qFmHVN2UFb0tXo+ygzm6eWKIml7c7solC7lLDv5U9XfHctUxO6KEYeBgJ2sqNlVEWd80bluFouf8VIhIOFU4J3JuQHlnefh6jpMMcIBGpOgo5dbUXOdy/mVfIql6hzUqxsl1Qbn4geVKqDLX7yPmDqi3oEtivX3VLKtFVt2+iZF7lioTUCYEtvwpZOmLNXKeFRTjLVpGo3b9h4ET4KciM+QwQB3AWLLTz6xEc6m11h9+u0aBvNtuSDPidz/mMj8Hjh7nkg2dCSWqfzGPvAfG0SBN/yC7+OjYk09d5+yPrG8xUhPIdS6l5DssPbhC/tZM/brz4/TqbiC81v8hEi7c9DRnCk+n8H3vsq74+wOTrS+vcQoi7D5vKDZ64UFjMvGXltfmYZ7EGPDWW8kRr5Dw6Cwr7gRgGoeSH2Q955qTCLyPRYtfjgqlJchYBEs2IVSG2CAk8ozszDUSmS4H2D1SqxMdwJer4cMAQXHPacKLRu0EOJJsV7QwchLFfDk31otDGbQIc0aoAYTxAuzl21pebFC8uzY9znfxAC+xD+8RG7YfhlpNZBO601BPJoc3PP9AEU09vzF+4KXyLaQreyBk/VyVWR8FJ29k45TG8kieFk7jLWuHBibgXnO/a+R3kbKqA7x6y4dLhmwZ6xpbqQVEhjobMaZTeSSZvW6xjP9cMmEbDpUs6zWBxC1V1RiFIIqPn0TAJPU5tEyUVnmsvSz0a4yEa4WZg3faZBSevngr06+XEM9Wi8u6oOUgPIWT4JovixzUi+GGXFG3nFGpWaZu5loBhi49v+lbB9LVrlUTrz2xvLQdLtY5qKVaReSxsDAeQIKaIqF8lcLshhi8b2vqwIr0CHUHoZ0v0zYok4UFQ0Y8RPzO+Vmx+8NvCTtwVnp XnUpdj9a Ltx1QILtKXpOHPpkg8dAaJtGKDq9MRruao44z8JVNBdZjOG2jx2uTK8VIk7s1SllYKcEFovGNm3ZaonZhxML43Joi3PbDXZO7hRGiLoi8ydil2XSTy10uSFZpAARk9vEsmx6E0Vlo6ZO+Dj7EdeGbY//90dkZvyXq/zokjgEuNf79ZbxZ1knP74N/XaAqUB112fl5pRCL151Y+0h7bXIkAd8BhLpRkYThEIJgr+3/iJb468vIDrHlBraTjOjK+JRg+gXRJwxlktLSxU6nswTSAxvRJvRqLe8OqsqLhzoP6YnEjFTj+nRHIh5Yr+kTuAJga4qV3Mpl+rlAExKhDRTfouYScEIpoCGxJv1J6lNA6Ab9PWv0/30gDmszbcGlv9OAcCvbTESUE/l8UziBi9jd/FBFI8muQU7iU7+1FxJ8s+eX9RNIzgN1o61Z4TFyZoXKziaYE5zH75e8XkRd7xpoWcnlNNpndfmfK62iGcVOfDAyBlZIFgg7Wdfn5g== 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: From: Fan Ni The function free_page_and_swap_cache() takes a struct page pointer as input parameter, but it will immediately convert it to folio and all operations following within use folio instead of page. It makes more sense to pass in folio directly. Introduce free_folio_and_swap_cache(), which takes folio as input to replace free_page_and_swap_cache(). And apply it to all occurrences where free_page_and_swap_cache() was used. Signed-off-by: Fan Ni Reviewed-by: Zi Yan Acked-by: Davidlohr Bueso Reviewed-by: Vishal Moola (Oracle) --- arch/s390/include/asm/tlb.h | 4 ++-- include/linux/swap.h | 10 +++++++--- mm/huge_memory.c | 2 +- mm/khugepaged.c | 2 +- mm/swap_state.c | 8 +++----- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/arch/s390/include/asm/tlb.h b/arch/s390/include/asm/tlb.h index f20601995bb0..e5103e8e697d 100644 --- a/arch/s390/include/asm/tlb.h +++ b/arch/s390/include/asm/tlb.h @@ -40,7 +40,7 @@ static inline bool __tlb_remove_folio_pages(struct mmu_gather *tlb, /* * Release the page cache reference for a pte removed by * tlb_ptep_clear_flush. In both flush modes the tlb for a page cache page - * has already been freed, so just do free_page_and_swap_cache. + * has already been freed, so just do free_folio_and_swap_cache. * * s390 doesn't delay rmap removal. */ @@ -49,7 +49,7 @@ static inline bool __tlb_remove_page_size(struct mmu_gather *tlb, { VM_WARN_ON_ONCE(delay_rmap); - free_page_and_swap_cache(page); + free_folio_and_swap_cache(page_folio(page)); return false; } diff --git a/include/linux/swap.h b/include/linux/swap.h index db46b25a65ae..9fc8856eeed9 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -450,7 +450,7 @@ static inline unsigned long total_swapcache_pages(void) } void free_swap_cache(struct folio *folio); -void free_page_and_swap_cache(struct page *); +void free_folio_and_swap_cache(struct folio *folio); void free_pages_and_swap_cache(struct encoded_page **, int); /* linux/mm/swapfile.c */ extern atomic_long_t nr_swap_pages; @@ -522,8 +522,12 @@ static inline void put_swap_device(struct swap_info_struct *si) do { (val)->freeswap = (val)->totalswap = 0; } while (0) /* only sparc can not include linux/pagemap.h in this file * so leave put_page and release_pages undeclared... */ -#define free_page_and_swap_cache(page) \ - put_page(page) +#define free_folio_and_swap_cache(folio) \ + do { \ + if (!folio_test_slab(folio)) \ + folio_put(folio); \ + } while (0) + #define free_pages_and_swap_cache(pages, nr) \ release_pages((pages), (nr)); diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 28c87e0e036f..65a5ddf60ec7 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -3640,7 +3640,7 @@ static int __split_unmapped_folio(struct folio *folio, int new_order, * requires taking the lru_lock so we do the put_page * of the tail pages after the split is complete. */ - free_page_and_swap_cache(&new_folio->page); + free_folio_and_swap_cache(new_folio); } return ret; } diff --git a/mm/khugepaged.c b/mm/khugepaged.c index b8838ba8207a..5cf204ab6af0 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -746,7 +746,7 @@ static void __collapse_huge_page_copy_succeeded(pte_t *pte, ptep_clear(vma->vm_mm, address, _pte); folio_remove_rmap_pte(src, src_page, vma); spin_unlock(ptl); - free_page_and_swap_cache(src_page); + free_folio_and_swap_cache(src); } } diff --git a/mm/swap_state.c b/mm/swap_state.c index 68fd981b514f..ac4e0994931c 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -232,13 +232,11 @@ void free_swap_cache(struct folio *folio) } /* - * Perform a free_page(), also freeing any swap cache associated with - * this page if it is the last user of the page. + * Freeing a folio and also freeing any swap cache associated with + * this folio if it is the last user. */ -void free_page_and_swap_cache(struct page *page) +void free_folio_and_swap_cache(struct folio *folio) { - struct folio *folio = page_folio(page); - free_swap_cache(folio); if (!is_huge_zero_folio(folio)) folio_put(folio);