From patchwork Tue Mar 25 16:25:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 14028181 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 58FEEC36008 for ; Tue, 25 Mar 2025 07:30:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B1E20280004; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8D721280006; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5A2B1280007; Tue, 25 Mar 2025 03:30:03 -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 31AE3280003 for ; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 1AD531CC844 for ; Tue, 25 Mar 2025 07:30:04 +0000 (UTC) X-FDA: 83259249528.12.7A3E5B5 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by imf10.hostedemail.com (Postfix) with ESMTP id A0F8AC0008 for ; Tue, 25 Mar 2025 07:30:01 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=none; dmarc=none; spf=none (imf10.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742887802; 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; bh=zf8fXc7U6GwaX08HKoJJCMueByqFMXthgzr6TyVsMB0=; b=2hZpLuerAVipmJDOTv4JLAxo5xOxw07e65wErdLqvSWZZJrbj5BHj7/sNsL0NackMGmp0o ArxADYpr4Woq4OtMjzzuvT64BE7uMeivzFsa2B8muXiIHz6Y5fQGAAEqSEFAMf2mIFoul6 QO3a2I+0/x8hEUNfJFh7R6BYjvda5FM= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=none; dmarc=none; spf=none (imf10.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742887802; a=rsa-sha256; cv=none; b=AMn2NDgWhQTaWOUrAP/Nd86W5nANkEdkA0bqvI/FolcSMh3yDexxFUzHlm3KPkv1AhNcS6 AbR5fHErcmY7WeNSISTAjDwupsBPLEA5XQm4KICZ5Bo6hIdd5vgUszwBTXwV2D7rJF/Hyr lNUU2Zhmg7cMw26z2tdY8tw/2sWY3vY= Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4ZMM4f2RD9z4f3jt9 for ; Tue, 25 Mar 2025 15:29:38 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id D23D61A0ACF for ; Tue, 25 Mar 2025 15:29:55 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.101.6]) by APP2 (Coremail) with SMTP id Syh0CgB3M2ZxW+JnZofaHQ--.14216S3; Tue, 25 Mar 2025 15:29:55 +0800 (CST) From: Kemeng Shi To: akpm@linux-foundation.org Cc: kasong@tencent.com, tim.c.chen@linux.intel.com, bhe@redhat.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 1/8] mm: swap: rename __swap_[entry/entries]_free[_locked] to swap_[entry/entries]_put[_locked] Date: Wed, 26 Mar 2025 00:25:21 +0800 Message-Id: <20250325162528.68385-2-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20250325162528.68385-1-shikemeng@huaweicloud.com> References: <20250325162528.68385-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: Syh0CgB3M2ZxW+JnZofaHQ--.14216S3 X-Coremail-Antispam: 1UD129KBjvJXoWxZrWUKFW5Zw1DuF4rGF47CFg_yoWrKF1kpF 9Igrn8KFs7Jr1xGws7Xw48ZrWFvw4xWw18tFy7Gw12vasxJryFqFyDC3y2gFyUCr95CF90 ya1Utry7GF4jqF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPFb4IE77IF4wAFF20E14v26r4j6ryUM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M2 8IrcIa0xkI8VA2jI8067AKxVWUGwA2048vs2IY020Ec7CjxVAFwI0_JFI_Gr1l8cAvFVAK 0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVW7JVWDJwA2z4 x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l 84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I 8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AK xVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lc7CjxVAaw2AFwI 0_JF0_Jw1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG 67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r1DMI IYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E 14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJV W8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjxUVF1v DUUUU X-CM-SenderInfo: 5vklyvpphqwq5kxd4v5lfo033gof0z/ X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: A0F8AC0008 X-Stat-Signature: cqqt4gu4upf1znmu7dabw6h4sk5yk65j X-HE-Tag: 1742887801-422669 X-HE-Meta: U2FsdGVkX1/2rk6FyMYIRqTi/mvtyUjsGHXLgozGVvliU+GH3mVJCL9l0FM0VZYu770HxRQMUAoUkSx63DEC36jV4/fpmRVAKqauR6C8P2A/kuyX2oCI/KzHnnFQg0H4qSX2do+EPq/U2nxZAXnf99NNRRndwSFoNPjr5kcCRNt8fllJdYGh4p7eGDny8XhN7abXnvulk+MknVVtt1re289A2yINlFJuDtlgoEQlYaUN0RKjtAxIH8Q5y2EnDEgzpkOaK4iilRKsWnoWed1dSckLrC5peP+qskNoocApC64cYxVblxFPUErDQzTrC5l7mxPBBh0eLvBWi3kf1OM4ZtthQPpSUwocd+k30MLx5HeRa+sK4ktwcHg1DR+K3Qlp7xX4ws4oIAUgVgyIEmnch5xJ93D1iYQIsDY6Xn8QXq5l/uni2WYMWyAp+C1qfTDfQC1XpSDvhzi5PU1EdODGQESgDA/3wAZQNAYT3SMuEzlE8ueBd1DKVWzfwHjU9ZZb+9J46ijhVa3bkkfVuVO7hXRSV328p22cMhG/ilS/dANH0FHk1r6ZyEvSqiASioiylN/xG5Zc7nPYwWO5ksLKNUzS808xq0faTejnmSyFGzybehY17KOuGCCnq5J1qbsemRwsB5efu9WKn4Az266+M2ZlbQCYH+CdKtBj2XXP+G6WQY7Qgz4oddNjg0VBlEoLHTM5pZDhTxBMC17GvcgMra7s/lMKDyAEjuX0FeHYlrtZ7Z5mFEFlH9lHHllZb6yrmbphHv18KofuC9PAiVtFDMrw4Qk7i/9T/bTwMF3n5T6MUDIeWAk8FEGfXm59zRad2U+B3XHRQhgkb8TtzHDchL9HdjgCxQDtNiMUOyZ60/J6J/xJz5fSwUWzSj5b5bILax59FGXxQH8KS61nwcaLuJKvRvZ0bffAX54juV19hhNIfj6dK8xK0YvcLPiy6nFJKeeVY2SaNKMdslim1xP dGTeYHdj FG4Hrev4/63/2DJ9D8jIWzyPTPK4Ur8M5jg7/0o0he3sUcvXhCxBQm+1s+o5GeMuXbh1gy3B7koy4OHCY4kn9l0RyarJe6XTsUd9H+gRLV7vBHm8GhnusyZmOFkFSs7SwdSzUii9Kub/O2IR7Qbqkc2a8LVj/oQcCgyTT4Q6D94FBwqAQPWtiPk0zDhie7N/v+J/2wfxrfwc5hvvvU7Y56VrhSL+yNQqdfs72gSvxDCKq6cd0g88tuDhIrgSBhYnIGNcyXx/6mvzHWpZYA09MyJWSIw== 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: In __swap_entry_free[_locked] and __swap_entries_free, we decrease count first and only free swap entry if count drops to zero. This behavior is more akin to a put() operation rather than a free() operation. Therefore, rename these functions with "put" instead of "free". Additionally, add "_nr" suffix to swap_entries_put to indicate the input range may span swap clusters. Signed-off-by: Kemeng Shi Reviewed-by: Tim Chen Reviewed-by: Baoquan He --- mm/swapfile.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index 628f67974a7c..5a775456e26c 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1347,9 +1347,9 @@ static struct swap_info_struct *_swap_info_get(swp_entry_t entry) return NULL; } -static unsigned char __swap_entry_free_locked(struct swap_info_struct *si, - unsigned long offset, - unsigned char usage) +static unsigned char swap_entry_put_locked(struct swap_info_struct *si, + unsigned long offset, + unsigned char usage) { unsigned char count; unsigned char has_cache; @@ -1453,15 +1453,15 @@ struct swap_info_struct *get_swap_device(swp_entry_t entry) return NULL; } -static unsigned char __swap_entry_free(struct swap_info_struct *si, - swp_entry_t entry) +static unsigned char swap_entry_put(struct swap_info_struct *si, + swp_entry_t entry) { struct swap_cluster_info *ci; unsigned long offset = swp_offset(entry); unsigned char usage; ci = lock_cluster(si, offset); - usage = __swap_entry_free_locked(si, offset, 1); + usage = swap_entry_put_locked(si, offset, 1); if (!usage) swap_entry_range_free(si, ci, swp_entry(si->type, offset), 1); unlock_cluster(ci); @@ -1469,8 +1469,8 @@ static unsigned char __swap_entry_free(struct swap_info_struct *si, return usage; } -static bool __swap_entries_free(struct swap_info_struct *si, - swp_entry_t entry, int nr) +static bool swap_entries_put_nr(struct swap_info_struct *si, + swp_entry_t entry, int nr) { unsigned long offset = swp_offset(entry); unsigned int type = swp_type(entry); @@ -1501,7 +1501,7 @@ static bool __swap_entries_free(struct swap_info_struct *si, fallback: for (i = 0; i < nr; i++) { if (data_race(si->swap_map[offset + i])) { - count = __swap_entry_free(si, swp_entry(type, offset + i)); + count = swap_entry_put(si, swp_entry(type, offset + i)); if (count == SWAP_HAS_CACHE) has_cache = true; } else { @@ -1552,7 +1552,7 @@ static void cluster_swap_free_nr(struct swap_info_struct *si, ci = lock_cluster(si, offset); do { - if (!__swap_entry_free_locked(si, offset, usage)) + if (!swap_entry_put_locked(si, offset, usage)) swap_entry_range_free(si, ci, swp_entry(si->type, offset), 1); } while (++offset < end); unlock_cluster(ci); @@ -1599,7 +1599,7 @@ void put_swap_folio(struct folio *folio, swp_entry_t entry) swap_entry_range_free(si, ci, entry, size); else { for (int i = 0; i < size; i++, entry.val++) { - if (!__swap_entry_free_locked(si, offset + i, SWAP_HAS_CACHE)) + if (!swap_entry_put_locked(si, offset + i, SWAP_HAS_CACHE)) swap_entry_range_free(si, ci, entry, 1); } } @@ -1798,7 +1798,7 @@ void free_swap_and_cache_nr(swp_entry_t entry, int nr) /* * First free all entries in the range. */ - any_only_cache = __swap_entries_free(si, entry, nr); + any_only_cache = swap_entries_put_nr(si, entry, nr); /* * Short-circuit the below loop if none of the entries had their @@ -1811,7 +1811,7 @@ void free_swap_and_cache_nr(swp_entry_t entry, int nr) * Now go back over the range trying to reclaim the swap cache. This is * more efficient for large folios because we will only try to reclaim * the swap once per folio in the common case. If we do - * __swap_entry_free() and __try_to_reclaim_swap() in the same loop, the + * swap_entry_put() and __try_to_reclaim_swap() in the same loop, the * latter will get a reference and lock the folio for every individual * page but will only succeed once the swap slot for every subpage is * zero. @@ -3758,7 +3758,7 @@ int add_swap_count_continuation(swp_entry_t entry, gfp_t gfp_mask) * into, carry if so, or else fail until a new continuation page is allocated; * when the original swap_map count is decremented from 0 with continuation, * borrow from the continuation and report whether it still holds more. - * Called while __swap_duplicate() or caller of __swap_entry_free_locked() + * Called while __swap_duplicate() or caller of swap_entry_put_locked() * holds cluster lock. */ static bool swap_count_continued(struct swap_info_struct *si, From patchwork Tue Mar 25 16:25:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 14028180 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 570F4C3600C for ; Tue, 25 Mar 2025 07:30:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8E7AA280001; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 700B5280004; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 38149280006; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 0BA1D280004 for ; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id E3EFC1CC7A1 for ; Tue, 25 Mar 2025 07:30:03 +0000 (UTC) X-FDA: 83259249486.25.0B33B31 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by imf17.hostedemail.com (Postfix) with ESMTP id 7D9BF40011 for ; Tue, 25 Mar 2025 07:30:01 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=none; dmarc=none; spf=none (imf17.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742887802; a=rsa-sha256; cv=none; b=jSpHH2/7bMSPYUb9cTKBIHqPxydi69KmV3MY72oZHEvsWWzOK3cnvABGjnLThKRpmOibux MBuR0crw/CwQlr3kqea2tdf3cOYr/k1S8deK3WL4G0JR7acXYPfX5Uo2x0C6IB+2yBjI7z 1NioScqdOJoTFzaQ7FRPGv7kh/acq1U= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=none; dmarc=none; spf=none (imf17.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742887802; 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; bh=zny/eAhxiSEEY3GNbCL0Q/neb1ncUIDag20t2Toxa9M=; b=Jf3nXEUdIFdy0IrpOmxMldgxTeL/qujctCzDepxz+QUVibmrRbfq9gwRf0T06qcAYBj0+a 345tfzIHVvmli2bYEPiTpIjakiBlABJuKHT85q+8mqScqrODgv8Xss1HjICs/3LU7X1Nw/ M4fGfC/PNsvjRbYqLt5hkwFTZQsGPvU= Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4ZMM4W6HJdz4f3lgS for ; Tue, 25 Mar 2025 15:29:31 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 3BAFC1A0ACF for ; Tue, 25 Mar 2025 15:29:56 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.101.6]) by APP2 (Coremail) with SMTP id Syh0CgB3M2ZxW+JnZofaHQ--.14216S4; Tue, 25 Mar 2025 15:29:56 +0800 (CST) From: Kemeng Shi To: akpm@linux-foundation.org Cc: kasong@tencent.com, tim.c.chen@linux.intel.com, bhe@redhat.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/8] mm: swap: enable swap_entry_range_free() to drop any kind of last ref Date: Wed, 26 Mar 2025 00:25:22 +0800 Message-Id: <20250325162528.68385-3-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20250325162528.68385-1-shikemeng@huaweicloud.com> References: <20250325162528.68385-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: Syh0CgB3M2ZxW+JnZofaHQ--.14216S4 X-Coremail-Antispam: 1UD129KBjvJXoWxWr1ktF18tF48GF4ruryDJrb_yoWrCr18pF 9Igrn8Kr4xJF17K3y3Jw4Yyw4Sv3yxWw10qF9rGw1Sv3ZxJry0qFyDA3yYkFyUA34kuF9I ka1qqr17GF4jyFUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPFb4IE77IF4wAFF20E14v26ryj6rWUM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M2 8IrcIa0xkI8VA2jI8067AKxVWUXwA2048vs2IY020Ec7CjxVAFwI0_Gr0_Xr1l8cAvFVAK 0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVW7JVWDJwA2z4 x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l 84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I 8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AK xVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lc7CjxVAaw2AFwI 0_JF0_Jw1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG 67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r1DMI IYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E 14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJV W8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjxUaknY DUUUU X-CM-SenderInfo: 5vklyvpphqwq5kxd4v5lfo033gof0z/ X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 7D9BF40011 X-Stat-Signature: 8xhfeehb98dfh1xhqccozryqtjifrfk3 X-HE-Tag: 1742887801-376574 X-HE-Meta: U2FsdGVkX18hIeqtAHV7qWCwFxUvOQ7LtTOCIvIDbhuIGpDRlP4aKfQPJuwvq3wIonhoDPHUyKDamdCEzI0MmVcW7JFtIGZS1VmkxqO7nDYjFSTjKWOuE0OOgH7HlPCfLC4FMWpZeCqdDn48jBFzkbGap+7fHD7lUj8jLwnsEuYUqw7K4uQMDBePVbW+15wSOgLsp3yfU7e7d2nXS/aI1MsrYHbPCYZhJqsLP4RtqlTySA10FVnMitk0CQgMU1KzKeJIwtvU45YIibqmubLOfdzl7VcajHxW7yrX8QwBTRL4uSmNF5lajNnrLCEjZKtI07MQ/Sl9f/0K0+lpRPyk0BGFHW2yWriz2BpAgu1t43jKt2950NTqFBQveiNR7m2q2AK0Q2DlEYrUmXcuuJzCJAuYUPubnToFYkO7fkI3Nl7ipRPSp544Y9eMY050t5r/pgp4fhoJTZy//Wdg04TNJLVt9ta74byUNsiRaUVxfXTqlmX5Dl8DGnFkDnVpFOYl35072go10ZfQvSrndtr3hKaysZxDlL+rP2OpOg7Tm/YYSldu7cn8PcXIFKFLT7mrdwCSfElNKJUL5ln5HtPhqxVN5xyeZOC/CKwkI8fUhaRHXUVtuxaCjksSX7tf06UucM4a0lB9HoDoSsJAuvMTUhddFV+W5ebB9YYEbLnBD6mtLKI7xossiEwC9OPBQEu7UelFNFFUnj/itC7PYe4aqiF/OWZNrzjxERhNSxk+iWAbGeSIqYCQLhRO8CK3ApASUURU2IF2Eh78R2JajBJxfrMAX3S75z9ExG7/P3XltEweVCgv/5PGYkLG7U66lyJ8kS2e2/bvkP7iGbcJ+c38VHSrDt4YkjelGXufarl/lL6XNA7qzbkb/OC7SRAHnTL0OGQmNUE94Q4TADfJWJ6sdvNenh0htXqcjr0ctoeWAYCVkwDJ9fXSYX3zdR3nLELf8mmNrBcY4OtZNBKh/2D UCvNi5PB XZM7SBPNwM0vNRE8RDESLo6XXb4r0T0M1qf5k17C2cxFX+zPXudDCmF0Zbc2/DBMd6sEW3UygQ5lsuKhMgppQ7H6LKvrHoH3qQR2mhvMQhePDC8lyCFYKd3pkxUYbYYsGG2r/jj2gw7VWr0rbK1NZO6Hx0wPbyZGuxdjBoB9PTjQehaJp478/lY/+ERTIz/qtV26YNq8X+FJLvrN6rgsmKdiLUxHZFRMIYQf0ORQjJ5qZks3KJy4HoxPCYA/Vt1JVLR0ZtJNJtp/NMSI3xszC/jda0nrSjTZtXhUJJScG7Ozo2C7lMjycxCFEWw== 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: The original VM_BUG_ON only allows swap_entry_range_free() to drop last SWAP_HAS_CACHE ref. By allowing other kind of last ref in VM_BUG_ON, swap_entry_range_free() could be a more general-purpose function able to handle all kind of last ref. Following thi change, also rename swap_entry_range_free() to swap_entries_free() and update it's comment accordingly. This is a preparation to use swap_entries_free() to drop more kind of last ref other than SWAP_HAS_CACHE. Signed-off-by: Kemeng Shi Reviewed-by: Tim Chen Reviewed-by: Baoquan He --- mm/swapfile.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index 5a775456e26c..76720ca76aae 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -52,9 +52,9 @@ static bool swap_count_continued(struct swap_info_struct *, pgoff_t, unsigned char); static void free_swap_count_continuations(struct swap_info_struct *); -static void swap_entry_range_free(struct swap_info_struct *si, - struct swap_cluster_info *ci, - swp_entry_t entry, unsigned int nr_pages); +static void swap_entries_free(struct swap_info_struct *si, + struct swap_cluster_info *ci, + swp_entry_t entry, unsigned int nr_pages); static void swap_range_alloc(struct swap_info_struct *si, unsigned int nr_entries); static bool folio_swapcache_freeable(struct folio *folio); @@ -1463,7 +1463,7 @@ static unsigned char swap_entry_put(struct swap_info_struct *si, ci = lock_cluster(si, offset); usage = swap_entry_put_locked(si, offset, 1); if (!usage) - swap_entry_range_free(si, ci, swp_entry(si->type, offset), 1); + swap_entries_free(si, ci, swp_entry(si->type, offset), 1); unlock_cluster(ci); return usage; @@ -1493,7 +1493,7 @@ static bool swap_entries_put_nr(struct swap_info_struct *si, for (i = 0; i < nr; i++) WRITE_ONCE(si->swap_map[offset + i], SWAP_HAS_CACHE); if (!has_cache) - swap_entry_range_free(si, ci, entry, nr); + swap_entries_free(si, ci, entry, nr); unlock_cluster(ci); return has_cache; @@ -1512,12 +1512,18 @@ static bool swap_entries_put_nr(struct swap_info_struct *si, } /* - * Drop the last HAS_CACHE flag of swap entries, caller have to - * ensure all entries belong to the same cgroup. + * Drop the last ref(1, SWAP_HAS_CACHE or SWAP_MAP_SHMEM) of swap entries, + * caller have to ensure all entries belong to the same cgroup and cluster. */ -static void swap_entry_range_free(struct swap_info_struct *si, - struct swap_cluster_info *ci, - swp_entry_t entry, unsigned int nr_pages) +static inline bool swap_is_last_ref(unsigned char count) +{ + return (count == SWAP_HAS_CACHE) || (count == 1) || + (count == SWAP_MAP_SHMEM); +} + +static void swap_entries_free(struct swap_info_struct *si, + struct swap_cluster_info *ci, + swp_entry_t entry, unsigned int nr_pages) { unsigned long offset = swp_offset(entry); unsigned char *map = si->swap_map + offset; @@ -1530,7 +1536,7 @@ static void swap_entry_range_free(struct swap_info_struct *si, ci->count -= nr_pages; do { - VM_BUG_ON(*map != SWAP_HAS_CACHE); + VM_BUG_ON(!swap_is_last_ref(*map)); *map = 0; } while (++map < map_end); @@ -1553,7 +1559,7 @@ static void cluster_swap_free_nr(struct swap_info_struct *si, ci = lock_cluster(si, offset); do { if (!swap_entry_put_locked(si, offset, usage)) - swap_entry_range_free(si, ci, swp_entry(si->type, offset), 1); + swap_entries_free(si, ci, swp_entry(si->type, offset), 1); } while (++offset < end); unlock_cluster(ci); } @@ -1596,11 +1602,11 @@ void put_swap_folio(struct folio *folio, swp_entry_t entry) ci = lock_cluster(si, offset); if (swap_only_has_cache(si, offset, size)) - swap_entry_range_free(si, ci, entry, size); + swap_entries_free(si, ci, entry, size); else { for (int i = 0; i < size; i++, entry.val++) { if (!swap_entry_put_locked(si, offset + i, SWAP_HAS_CACHE)) - swap_entry_range_free(si, ci, entry, 1); + swap_entries_free(si, ci, entry, 1); } } unlock_cluster(ci); From patchwork Tue Mar 25 16:25:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 14028179 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 C6549C3600B for ; Tue, 25 Mar 2025 07:30:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 68975280003; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6189A280001; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 26F8A280001; Tue, 25 Mar 2025 03:30:03 -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 EBAA1280003 for ; Tue, 25 Mar 2025 03:30:02 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id B7105813FF for ; Tue, 25 Mar 2025 07:30:03 +0000 (UTC) X-FDA: 83259249486.13.9C6A348 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by imf07.hostedemail.com (Postfix) with ESMTP id 405D940007 for ; Tue, 25 Mar 2025 07:30:00 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=none; spf=none (imf07.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742887802; 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; bh=jOKsxg/eaNk7CGfWrQrZTcqXmXONHMcbTsKd49Pdlig=; b=4Qs6FpWxA1uiNcZ5q8M8Bqn7a5nR81mdYmiHJycCpJOmQFRQPMbdYCk0kBUFYr2jI+Js8S Lbnts7eDmJSr+Ae2aO0OOQoDNpOMaCQYq9tW52pT6zoxJd4sf7hbIg69MDvorex5YIlyhn nghyfYMXJ/P1xCqG3VMqEIo9OsdIHMQ= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=none; spf=none (imf07.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742887802; a=rsa-sha256; cv=none; b=l764JIlzRqPpfrr3xKzpVGgKTBoJHGGFlqAwpDvdoaKTrdmFyBgIB/EK0K66SRU2j5H9Uj GFm3GRoFBFIY/zOo03cyjzsATgWU75fskOWMJrLlbA1M3CqsZGKCVro2WyLqbbhKncJYn/ /LvaH13f3gSyTV0ABc+vuqy9iZ3Bkyk= Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4ZMM4X18K6z4f3m6g for ; Tue, 25 Mar 2025 15:29:32 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 861E01A0ACF for ; Tue, 25 Mar 2025 15:29:56 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.101.6]) by APP2 (Coremail) with SMTP id Syh0CgB3M2ZxW+JnZofaHQ--.14216S5; Tue, 25 Mar 2025 15:29:56 +0800 (CST) From: Kemeng Shi To: akpm@linux-foundation.org Cc: kasong@tencent.com, tim.c.chen@linux.intel.com, bhe@redhat.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 3/8] mm: swap: use swap_entries_free() to free swap entry in swap_entry_put_locked() Date: Wed, 26 Mar 2025 00:25:23 +0800 Message-Id: <20250325162528.68385-4-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20250325162528.68385-1-shikemeng@huaweicloud.com> References: <20250325162528.68385-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: Syh0CgB3M2ZxW+JnZofaHQ--.14216S5 X-Coremail-Antispam: 1UD129KBjvJXoWxZF1DKr13Gr4xKr1ktrW3trb_yoW5Wr4xpF ZIgr4DtF48Ar17Kw45Aw45ZayFvw4xWw1jqF9rGw15ZasxJryFgFyDA3y2gFyUA3s8uas8 A3WUtr17uF4jyFUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPFb4IE77IF4wAFF20E14v26rWj6s0DM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M2 8IrcIa0xkI8VA2jI8067AKxVWUWwA2048vs2IY020Ec7CjxVAFwI0_Gr0_Xr1l8cAvFVAK 0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVW7JVWDJwA2z4 x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l 84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I 8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AK xVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lc7CjxVAaw2AFwI 0_JF0_Jw1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG 67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r1DMI IYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E 14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJV W8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjxUa75r DUUUU X-CM-SenderInfo: 5vklyvpphqwq5kxd4v5lfo033gof0z/ X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 405D940007 X-Stat-Signature: 9fywuknqkfckaipy644dz8b5y6dwyhff X-Rspam-User: X-HE-Tag: 1742887800-236593 X-HE-Meta: U2FsdGVkX1+Xa/rivEqW7T3FxJxnexIEEvYl+a+D4tL8DoQAXUmqUcyDR6Tl4ONYli1tAHPpJH7skdNZN9w3WIkNuMo8SSHaEvMs7+6t6Y1u1dhEBzgNE5P4i+tnluOKpRjq0CR5D/PpK0uUcZJ0KCCwz3rll1MgHUw0Kt/Y2P8i76ujXmMLCisSBuvJbXo0fITjzOodYVLyPKlS3IjkXytq7I+J9dLq4x8YC+WON3DN8HMAZuZ8YjeEhdlgIAUeVkNtzhJpFGmmqrEKuHyi+R/0f46au+i4gGGWnU5WeOPIB5Nd4HwFsF3HGZc+UjNqUHjP+UD6ZfrtAWMfxO8TekPpNaxiQ07kQUX4a9MwjK15eR3IjH2F2OzPds7Zs92Dd6MY+2N4HYjphJkyRBIY1sDlmXfImblQB+V8CgWJE2OpVvEtLvBGJ6re02/jFm9LJeP/+xMNETtc50OBsvKpyf8hYgkw+WVd04C/OWGiq4dUDcTK+yfH/W5+l6t6u/EdyAqV80G8OIj3sMSeooTXOynzGZsM/CgUBksoPShHvbjYgVcGFxlQez3F8RoEdelBeQjQAwRRCSzjxX2oqPT7jYS+J/+6SnCwCCvl9cVqq+jLGcQlfkOBG33yn4WSjnrJIoe4S2h4s36nS9NCHePgEqiMRjZsxV4CxcllYNk4gKRM5qDEv+u5BsoLsIXPLDfnXbEff1WVI557KFsNao3wMbLOF58jMdTrU/dUU53QJEdCTO3ocCwKpxDIsPwLnrCy1QPzA/TQBbroccgtSIk9situUVVLv0vxj6gJzXmLchOt2vOpdbmtMxOCsghm+mc1bdMKYghxcloqB91CE89XD9d+hXzjRzPYeVlZC4wKBjiYHlr8UfuPLH66G/mpWrdVSNW8H8frdiu+PSWpvAai+GTwtIxwjfwAg6Rg4oxnpQi3hnyXPsAllg1QQMB36NUbRdSsuu80WFMA0X6FNN+ XAYVPt6T gTaJUWNrZ/yW5OPnJAGC9l1aOah/pkmv1o4PGX7BjLOieBMWhY6PdL9HF3zlYJHnW+QWAkN8cMW00i8jBvL5bET0Ll2Wq68c9IBivd8ZbMDa/KtwhDP/2WLHPTn5IduZcLJ/0D6xZYbfLHOmWolX9Msr2XHKezoMjOwejk8fyMK1vjt75aYS95VBCpTrObToqTJ0bZCBx01uC421KR0EvslrvycD1lNLXGIfnneLtG1uCtkS5BBIpwqnRTrdznPtLE0DAP2ST1P5x+ZxHf/2Bv/nJfJGRdzTO7H9lXN9GIMfsjTM= 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: In swap_entry_put_locked(), we will set slot to SWAP_HAS_CACHE before using swap_entries_free() to do actual swap entry freeing. This introduce an unnecessary intermediate state. By using swap_entries_free() in swap_entry_put_locked(), we can eliminate the need to set slot to SWAP_HAS_CACHE. This change would make the behavior of swap_entry_put_locked() more consistent with other put() operations which will do actual free work after put last reference. Signed-off-by: Kemeng Shi Reviewed-by: Tim Chen Reviewed-by: Kairui Song Reviewed-by: Baoquan He --- mm/swapfile.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index 76720ca76aae..d05b58e9c723 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1348,9 +1348,11 @@ static struct swap_info_struct *_swap_info_get(swp_entry_t entry) } static unsigned char swap_entry_put_locked(struct swap_info_struct *si, - unsigned long offset, + struct swap_cluster_info *ci, + swp_entry_t entry, unsigned char usage) { + unsigned long offset = swp_offset(entry); unsigned char count; unsigned char has_cache; @@ -1382,7 +1384,7 @@ static unsigned char swap_entry_put_locked(struct swap_info_struct *si, if (usage) WRITE_ONCE(si->swap_map[offset], usage); else - WRITE_ONCE(si->swap_map[offset], SWAP_HAS_CACHE); + swap_entries_free(si, ci, entry, 1); return usage; } @@ -1461,9 +1463,7 @@ static unsigned char swap_entry_put(struct swap_info_struct *si, unsigned char usage; ci = lock_cluster(si, offset); - usage = swap_entry_put_locked(si, offset, 1); - if (!usage) - swap_entries_free(si, ci, swp_entry(si->type, offset), 1); + usage = swap_entry_put_locked(si, ci, entry, 1); unlock_cluster(ci); return usage; @@ -1558,8 +1558,8 @@ static void cluster_swap_free_nr(struct swap_info_struct *si, ci = lock_cluster(si, offset); do { - if (!swap_entry_put_locked(si, offset, usage)) - swap_entries_free(si, ci, swp_entry(si->type, offset), 1); + swap_entry_put_locked(si, ci, swp_entry(si->type, offset), + usage); } while (++offset < end); unlock_cluster(ci); } @@ -1604,10 +1604,8 @@ void put_swap_folio(struct folio *folio, swp_entry_t entry) if (swap_only_has_cache(si, offset, size)) swap_entries_free(si, ci, entry, size); else { - for (int i = 0; i < size; i++, entry.val++) { - if (!swap_entry_put_locked(si, offset + i, SWAP_HAS_CACHE)) - swap_entries_free(si, ci, entry, 1); - } + for (int i = 0; i < size; i++, entry.val++) + swap_entry_put_locked(si, ci, entry, SWAP_HAS_CACHE); } unlock_cluster(ci); } From patchwork Tue Mar 25 16:25:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 14028178 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 6EB27C35FFC for ; Tue, 25 Mar 2025 07:30:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 41DDB280005; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3CFB0280004; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1AC66280005; Tue, 25 Mar 2025 03:30:03 -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 E6EC7280001 for ; Tue, 25 Mar 2025 03:30:02 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 90BB0595FB for ; Tue, 25 Mar 2025 07:30:03 +0000 (UTC) X-FDA: 83259249486.24.C7565AD Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by imf21.hostedemail.com (Postfix) with ESMTP id 6A4F31C0005 for ; Tue, 25 Mar 2025 07:30:00 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=none; dmarc=none; spf=none (imf21.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742887802; a=rsa-sha256; cv=none; b=GoWnrN+nw0vmMrWlaXtf7eC2ZazOQUzTEA7HBHUsz4WLKq/6DZ1XoHe+VUUEk4/7DvRYV9 0Yh8xzWc8Kv90AXx6o2Hrlhj1gppeIusMBm0dxuie7T6BU53A+3LN8mqD5OvtRydMtiASC hyrcpnOEzG9/O/Lug/JOGHbCBNJwWng= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=none; dmarc=none; spf=none (imf21.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742887802; 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; bh=WUfjUAX1ArZQPWr1EKJBiav7XY8S6pPFncglCZhUAF8=; b=JsA0bUiCGy1JsI+egioOlGLKr0OyG9NoGUA74J0Lhq2riQn/nhtWiKG+tSZScnjzVUh5UX d2HuKcTUOzdsle9q3nyFKe/fJrmIa5yHE/TVlIYaSUp1WwQyL1L/k5W0KgHXnJwY4djsJd PrOSbk7Uvt5FKwWzoupVcno7ESHS1cY= Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4ZMM4X3fxgz4f3m6r for ; Tue, 25 Mar 2025 15:29:32 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id DC6A21A1996 for ; Tue, 25 Mar 2025 15:29:56 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.101.6]) by APP2 (Coremail) with SMTP id Syh0CgB3M2ZxW+JnZofaHQ--.14216S6; Tue, 25 Mar 2025 15:29:56 +0800 (CST) From: Kemeng Shi To: akpm@linux-foundation.org Cc: kasong@tencent.com, tim.c.chen@linux.intel.com, bhe@redhat.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 4/8] mm: swap: use swap_entries_free() drop last ref count in swap_entries_put_nr() Date: Wed, 26 Mar 2025 00:25:24 +0800 Message-Id: <20250325162528.68385-5-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20250325162528.68385-1-shikemeng@huaweicloud.com> References: <20250325162528.68385-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: Syh0CgB3M2ZxW+JnZofaHQ--.14216S6 X-Coremail-Antispam: 1UD129KBjvdXoWrKrWUWrWrAr4fuw4Utw43ZFb_yoWDGrc_ua 9Yy34kCw47JF1DGw17tr12vr9Yga1qyF1rZw1ftFWavFn5JF95ZwsFgr98Aw10va10vrn3 Aanaqrn3Ar1DujkaLaAFLSUrUUUUjb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUbqkYFVCjjxCrM7AC8VAFwI0_Wr0E3s1l1xkIjI8I6I8E6xAIw20E Y4v20xvaj40_Wr0E3s1l1IIY67AEw4v_Jr0_Jr4l87I20VAvwVAaII0Ic2I_JFv_Gryl82 xGYIkIc2x26280x7IE14v26r126s0DM28IrcIa0xkI8VCY1x0267AKxVW5JVCq3wA2ocxC 64kIII0Yj41l84x0c7CEw4AK67xGY2AK021l84ACjcxK6xIIjxv20xvE14v26F1j6w1UM2 8EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4UJVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq 3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_GcCE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8w Aqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_Jr0_Jr4lYx0Ex4A2jsIE 14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvY0x0EwIxGrwCY1x0262kKe7 AKxVWUAVWUtwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02 F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw 1lIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7Cj xVAFwI0_Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r 1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x07ja g4hUUUUU= X-CM-SenderInfo: 5vklyvpphqwq5kxd4v5lfo033gof0z/ X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 6A4F31C0005 X-Stat-Signature: qyug6sgqbd9ghp58hsn6d3kokqqqb4k7 X-HE-Tag: 1742887800-431138 X-HE-Meta: U2FsdGVkX1+LixCiucED4ra00Q/wuomBRcy4XtiGfOlEpsnKwDwi84dodY/LZ4wpzY326uWbIgQt7AfKme/XVrIkmPt6jlqyGERj3k+ySEpMTfGOh1H2wVbrpieabvIUXqnBTNAmLuF8I2TgK3Oc6qtwIPu+tDaMc6QQmsHAzOGar5hteF48W7L+UdB9VFUCrvJhzG6uCHxWL4k+mlsw3rlMxuxIpEvtJwbaiDsF6OILXXf0onwV34ZD2qwC6fAnoqLNIL7ak55GMN6nGsVli0Ut/VBY3XiBQYDpgDfTlKXNO6wliGM95W6hzA6mEOaBByXijbFZW6E2l/wp+UpeD3SG9Nwzm7jpnqhqT5IO7VelGMgAhMIGFFC5noPAFKIfK+/5TTqJ4Q4UTGKyQD4UIWudouYhYNuEBCfPuYVqyQAHVRvvK3nR0wmD7xHNOEV8KU2BBnFlxCmGVJtWCjyMMhamPk6qz9+fgSk6pFBPG6s9ogYoiNWYRyjLhz5mKj5S28PFnEzd8fpxkPib0W+lgugdUQbn4kIOguj4JFvLlDTzEL4mSel01t2RsdRAwvKSyXuG/EFT+60WGdlxC89yNWGBt63QgApdlYOlvZePy/8OBlQaJwQS3QqTVNltapogtc1oUgn0IYXHmwkir6IXhH0eZyr3Ra6NuuG35FOfGe5Dnv4zY2gPMszkSNG49DwtGGh/39LMW86FA5v91ZEGvddLDYG0pq9HMzVYNMKRQdohrJl1SKRpKMQDI/kNo1hirQV/RYwP2P/ZenOlVbGP2MT85tVHeRKzPKSFepOL7ZurWpxX4WfNnBOeXnYabE1YKsiRiQ2/cJNZG9sn6w3heeFtIaHFcZASH70uKz1mElUJKpi1h4L2OhzKaxb1ND+cTzlHBMZJZ+1C16Vaa+l0TTS/x3Vsin5VyMxkhiRJTBT81n2+F7GpJ/EG1hAAOubeyWRgHTF9BFA= 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: Use swap_entries_free() to directly free swap entries when the swap entries are not cached and referenced, without needing to set swap entries to set intermediate SWAP_HAS_CACHE state. Signed-off-by: Kemeng Shi Reviewed-by: Tim Chen Reviewed-by: Baoquan He --- mm/swapfile.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index d05b58e9c723..e83519fbd40e 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1490,10 +1490,11 @@ static bool swap_entries_put_nr(struct swap_info_struct *si, unlock_cluster(ci); goto fallback; } - for (i = 0; i < nr; i++) - WRITE_ONCE(si->swap_map[offset + i], SWAP_HAS_CACHE); if (!has_cache) swap_entries_free(si, ci, entry, nr); + else + for (i = 0; i < nr; i++) + WRITE_ONCE(si->swap_map[offset + i], SWAP_HAS_CACHE); unlock_cluster(ci); return has_cache; From patchwork Tue Mar 25 16:25:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 14028186 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 21660C35FFC for ; Tue, 25 Mar 2025 07:30:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 485BF28000B; Tue, 25 Mar 2025 03:30:05 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4364328000A; Tue, 25 Mar 2025 03:30:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3009528000B; Tue, 25 Mar 2025 03:30:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 0CFEF28000A for ; Tue, 25 Mar 2025 03:30:05 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id EE9AA1CCCD1 for ; Tue, 25 Mar 2025 07:30:05 +0000 (UTC) X-FDA: 83259249570.24.6E38488 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) by imf19.hostedemail.com (Postfix) with ESMTP id C9B1F1A000E for ; Tue, 25 Mar 2025 07:30:03 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=none; dmarc=none; spf=none (imf19.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.56) smtp.mailfrom=shikemeng@huaweicloud.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742887804; 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; bh=EMQcUDikCMdvpDLMDxQKTV5OPrj7sU/Z3vjHR+ygotk=; b=gwSK/C17F26twNhpOrTy5k8LgavzOt/abU6B5yD/2ZQHikMHH35JF1v+jsatWgKVQ7IyxF peE/RTI1AAZFdC8qf6TvsHNDR59kdDgVvAM+PtCOgLA9VFLLjxTs8W4Eiy5K15QSPEuWG4 lK9L1ZfZKokktpwG0ZBiNXKHGBVf+VA= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=none; dmarc=none; spf=none (imf19.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.56) smtp.mailfrom=shikemeng@huaweicloud.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742887804; a=rsa-sha256; cv=none; b=V5Xlo3pJT5VDQJ7LNgLMbIVkPIaPon3WbosSBMhu6MVjS6r2vv/otuhDmH0MAy02ES2m2n QoNzAMzeuRZjC7WmREfW5aJLwCsrj3TqSGxledIZGVaM0KmTp3U2tidwYqQ5xbAg2x68UG 5+nPpIYIHTqrB3tBsdHPK1iFvz27FdA= Received: from mail.maildlp.com (unknown [172.19.163.235]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4ZMM4Z2TZgz4f3jY4 for ; Tue, 25 Mar 2025 15:29:34 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 38CB61A0E01 for ; Tue, 25 Mar 2025 15:29:57 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.101.6]) by APP2 (Coremail) with SMTP id Syh0CgB3M2ZxW+JnZofaHQ--.14216S7; Tue, 25 Mar 2025 15:29:57 +0800 (CST) From: Kemeng Shi To: akpm@linux-foundation.org Cc: kasong@tencent.com, tim.c.chen@linux.intel.com, bhe@redhat.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 5/8] mm: swap: drop last SWAP_MAP_SHMEM flag in batch in swap_entries_put_nr() Date: Wed, 26 Mar 2025 00:25:25 +0800 Message-Id: <20250325162528.68385-6-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20250325162528.68385-1-shikemeng@huaweicloud.com> References: <20250325162528.68385-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: Syh0CgB3M2ZxW+JnZofaHQ--.14216S7 X-Coremail-Antispam: 1UD129KBjvJXoWrKF1Dtry5ur18tryxAw1kKrg_yoW8JrWDpF 4Fq34DKF4xtr12yFW7A3Z8CFyYgr4vkFyYqr9rG34fA3s8tw45u3s2yayrA3WjqFnYyFyY g3ZF9ryxuFyvqrUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPab4IE77IF4wAFF20E14v26rWj6s0DM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M2 8IrcIa0xkI8VA2jI8067AKxVWUAVCq3wA2048vs2IY020Ec7CjxVAFwI0_Xr0E3s1l8cAv FVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVW7JVWDJw A2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE 3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr2 1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv 67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lc7CjxVAaw2 AFwI0_JF0_Jw1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAq x4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r 1DMIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_JFI_Gr1lIxAIcVC0I7IYx2IY6xkF 7I0E14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxV WUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjxU s3kuDUUUU X-CM-SenderInfo: 5vklyvpphqwq5kxd4v5lfo033gof0z/ X-Rspamd-Server: rspam01 X-Stat-Signature: hquwq1hwmcs6pjmrh4scx8w4oc87do46 X-Rspam-User: X-Rspamd-Queue-Id: C9B1F1A000E X-HE-Tag: 1742887803-535225 X-HE-Meta: U2FsdGVkX18XcUk19ASRWRlcX/9dxSxPwHSWD/nqqbJM6pmPFmFXlFQ7KTAYwfjMRHIZBxHBaJhbCcNLrV7LINKloDRknLENN23gJwifssuTjvbXEjp73W/nDKHP+xci8peMiDPILI0s8XXu218oP737mEbk3mUx7Ksq5ldqF+EUWbSk9RC5l96I3OOiqRy4m38jJ5hEy9QVSBajgIdCUaTQfxDIIrN9B2XJXWHtFHlVKQf4gPzzdFI7h0RzYImwwExX1il7v8iZEXv7VrIQEjSN8BBgzWa4kkLGhx1DtivRMbQR2b87A2kFWLfXRf+YCsuBvnrnkDqo2sHY44AUG/bkegwT3HbxE4zCpdTCtCIsvQIjJg8Mxe5Tnr5FZ4icEVj9RCkGNtXFsYCxT8cnB/mF7E52JIk4xtDz5QBeLCtlyOtmgbgTJ5Nih66ktDcX4UYSEOpeRH7XBkm53hl8rissu9MgiGYyvhcI2Gv3M8GTzT+Foch/O7pMOQbaOzktyyCqkPnBqsJsZtQJ2B6o7MedJoM7CPicKA9CaV1wpzop96D4jYegAOJpCjEZLQ9FxT1OvCk54SXDO3+xHRwxqLEsuakH4v9m3ELZWcPScMoResgpQY7/LpDywJwm514FSRfhlPmn6+3dNW/CbB3C7u44nIiEidYZaCY2xYV8YuMe2JNNMa9Ow9IFjeOrtHE/8S67CWspW/Pl7gSFqVfylXG8+Fp9MZ+jZm6B79/aP3523HxBnnTZAaF3i6RJsKxaHIXW3d/d948G4EuphNGgo9LS50PYQz42//p7fHGtjjpIQWLBRiavCE48lyP47Y5qhml7RnZ/N5vmog+qN4XrhJqyfczZrTO7RNZ+qWMankbhv0Til7utFhGv7i4I6SVjxLZdbUMyRbZoNWXXQgXLU4+vhGSW+hO1frucl5fpuOHOLam5OtGCnV57r+S7ixRsYgQz8IkYhBf8LlLmuWz 9rE+xqLw 2ZL2LeSki8NpjYRwZm36owxDTuG7qZIHrhacXXYxOOm4LbxC2H3gxANGmwdNoxgKo0pwvJztqDLj5Fqss7XobYM76iZfyHLe97JW49+c5RmIDpYmUZtoONDyiKobEKTKjp26Np920iiWJkjubB9ZIAMtmuQP2+JGMPHUpYhdsTPzOZeNKqJhGlFQ+VdJWfp1qiggx2vC5XaGLQCN9gsQczH5DC2yINAohepOaNDl0RLXE3qj/mptz3T7hqdpMe904E6YsIbc6lTNBz0M+oqP8c+W+qg== 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: The SWAP_MAP_SHMEM indicates last map from shmem. Therefore we can drop SWAP_MAP_SHMEM in batch in similar way to drop last ref count in batch. Signed-off-by: Kemeng Shi Reviewed-by: Tim Chen Reviewed-by: Baoquan He --- mm/swapfile.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index e83519fbd40e..6f11619665e8 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -192,7 +192,7 @@ static bool swap_is_last_map(struct swap_info_struct *si, unsigned char *map_end = map + nr_pages; unsigned char count = *map; - if (swap_count(count) != 1) + if (swap_count(count) != 1 && swap_count(count) != SWAP_MAP_SHMEM) return false; while (++map < map_end) { @@ -1479,7 +1479,10 @@ static bool swap_entries_put_nr(struct swap_info_struct *si, unsigned char count; int i; - if (nr <= 1 || swap_count(data_race(si->swap_map[offset])) != 1) + if (nr <= 1) + goto fallback; + count = swap_count(data_race(si->swap_map[offset])); + if (count != 1 && count != SWAP_MAP_SHMEM) goto fallback; /* cross into another cluster */ if (nr > SWAPFILE_CLUSTER - offset % SWAPFILE_CLUSTER) From patchwork Tue Mar 25 16:25:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 14028183 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 02E6BC35FFC for ; Tue, 25 Mar 2025 07:30:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 38829280007; Tue, 25 Mar 2025 03:30:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 17F6C28000A; Tue, 25 Mar 2025 03:30:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E51AB280006; Tue, 25 Mar 2025 03:30:03 -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 B8F5C280008 for ; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 8931159600 for ; Tue, 25 Mar 2025 07:30:04 +0000 (UTC) X-FDA: 83259249528.06.7A31331 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) by imf03.hostedemail.com (Postfix) with ESMTP id E492120003 for ; Tue, 25 Mar 2025 07:30:01 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=none; spf=none (imf03.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.56) smtp.mailfrom=shikemeng@huaweicloud.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742887802; 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; bh=eiu/fTLJePQ1uuxdg4VVwzg2L0mmfznQHNoUogU0UPk=; b=igw/odYbV+pynB1bX69w4xAGsSD7PTDrmTPTho1xKcDjT21hQf4BaFhMXckYKLtqcmAmKN C3t20hPLFTFxTQnDl0lu7hhrFxxwiurQnmhszN6zLKERjdEoP7fJyVL4g1jWPDU19gx3zH JaBSNzjNhnVbSI+DwSuMZlCozRq1Ohc= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=none; spf=none (imf03.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.56) smtp.mailfrom=shikemeng@huaweicloud.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742887802; a=rsa-sha256; cv=none; b=jgPw8jSuFyiIWsptxHgn7hYs1/RShmQfCxG8NqBqGjHGP7ltxbrV5a82vzwYumKIg7ST0V gV0fbl7XGFFuKkKB5wID+aIj72ctdDcpIjvQZC+fzTQUJKmFXbUQiaSCLdaHilOvflkKtC bU/7vHwJOJps2W/wBLCLindxGQTZwAo= Received: from mail.maildlp.com (unknown [172.19.163.235]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4ZMM4Z4dlBz4f3jYR for ; Tue, 25 Mar 2025 15:29:34 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 837391A0E01 for ; Tue, 25 Mar 2025 15:29:57 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.101.6]) by APP2 (Coremail) with SMTP id Syh0CgB3M2ZxW+JnZofaHQ--.14216S8; Tue, 25 Mar 2025 15:29:57 +0800 (CST) From: Kemeng Shi To: akpm@linux-foundation.org Cc: kasong@tencent.com, tim.c.chen@linux.intel.com, bhe@redhat.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 6/8] mm: swap: free each cluster individually in swap_entries_put_map_nr() Date: Wed, 26 Mar 2025 00:25:26 +0800 Message-Id: <20250325162528.68385-7-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20250325162528.68385-1-shikemeng@huaweicloud.com> References: <20250325162528.68385-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: Syh0CgB3M2ZxW+JnZofaHQ--.14216S8 X-Coremail-Antispam: 1UD129KBjvJXoWxGryrGF1kAFWkuFW3WF1xZrb_yoWrtF48pF yagrn8trs7Xr43Jr4xJw4DZrWru3ykWF1jqa47Gr1SywnxGr1rWFyvy3ySgFyUC34kur9I y3W7K347uFs0qr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPab4IE77IF4wAFF20E14v26rWj6s0DM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M2 8IrcIa0xkI8VA2jI8067AKxVWUAVCq3wA2048vs2IY020Ec7CjxVAFwI0_Xr0E3s1l8cAv FVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVW7JVWDJw A2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE 3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr2 1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv 67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lc7CjxVAaw2 AFwI0_JF0_Jw1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAq x4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r 1DMIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_JFI_Gr1lIxAIcVC0I7IYx2IY6xkF 7I0E14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxV WUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjxU s3kuDUUUU X-CM-SenderInfo: 5vklyvpphqwq5kxd4v5lfo033gof0z/ X-Rspamd-Queue-Id: E492120003 X-Stat-Signature: m16gnqcbif3mmwrrmqq5f15hwnzufnd7 X-Rspam-User: X-Rspamd-Server: rspam12 X-HE-Tag: 1742887801-464223 X-HE-Meta: U2FsdGVkX1+oeuKJXbqTvTZYPnUpMeQs+Mbn7+BTE5DnNTy887OK/MHOaRDhSg+NSFP1q08eMud4dhbkzxIkyc76n9YyqZxl2IfPyDYo5t3GbXu6osZRifymhrFTW2sLKKuDKogLUwLz5CYrj1PlBQ9GblKzr+RsEHKSDrGp8ZfsxmyPC0t/hjPfko3aKLSVeV6BI68qawDfA7Jq5YvsQpJHGQymUD+98tTMOtolw6kjFQ4akbfp9a+AUEVgEhaprpXb4ibjt25NdbYj50XEK+Fa1RSn2YIJj1Z6HXvtlV55gNTGoqYt6COQNRSPVYFDIRQgl+LZJ+weBiYexcnFob1KIqgpfOGVvl2mvzQVYzKN3l2EUmQYZTWHeB/GRrH4vkIjve+sGCCAq1SVTphf+vMIEgk/lcl5vzbRo4y+3hWcJ1te67kLDRkO4PpWhlvWj91RZc+aVwGa6iop2J2Gfk+BlMWXGUcgmWL9DvTCuo3C/6oyrYgAFaL/nVrEnspi+zGPCaRY5EiByhIKWIAkiLqAkahLmg4Vb8Az4ockYRZzMNi9PeXyhVYnAsebTIPCHrW5+7Ie16OjMTfGV2WYf3w5ZM7f+LeIMez5dzopTINmKRvbyEpj1krkddSZR//fkQUGUCrHhL4W17RnTDIqiNVljJGA/pS2qSa9Xy3ULJBF644Ip6jsE9RachsxjTw3RWrRiD/vKoTgrLze+Thfo0d9B5pe0W3NslvkCxYMaADBuPBQfBH1dSp5PeSmrLQTmVKzjMg7EtxoeXK4VEOzs+/ZBXxGZUK0xyxGNebPANePJor8ZeUKHye2PXxEk770QKFgVFESE9JSufPxLTuJG3GFp8bI86yEO5P0KafN2UUXVF6Epg3CNtRfyor21k6ViEL0Te7FjtUkOEitSl2ViCFnt+bQNOmqgsIu6erhxebLRD3A5xD8bfOdBiCrLBxlt3Ifljl/ArKUuYLxk0u PB9J+mnk wFalmJ6pIhPBK3V1xTCgCqEk+/Z7YeVTAmizPjngkJ5HboQo4Z+0RZHeK2sb+X82Gw3SuCDQvugmHSCV9Ggl7SWEn592/BeSptlR9pzhEyBuAgJc5R47fkwM0R4y5pwd9QgG/wStOJVs8ARqSDTUQWGr3Gj5nATKeTpav+2ytBxcj+wBDfqpjNcXgKhrQojLqMlZ0FviSbtq0y0OHRfi0w//sdzhW3z+GiBNdMwYPfdKNtMQc+q/y8rVO+KmSdAWp6jX5i9AOZuAzSYnwJbkAWdNRjg== 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: 1. Factor out general swap_entries_put_map() helper to drop entries belonging to one cluster. If entries are last map, free entries in batch, otherwise put entries with cluster lock acquired and released only once. 2. Iterate and call swap_entries_put_map() for each cluster in swap_entries_put_nr() to leverage batch-remove for last map belonging to one cluster and reduce lock acquire/release in fallback case. 3. As swap_entries_put_nr() won't handle SWAP_HSA_CACHE drop, rename it to swap_entries_put_map_nr(). 4. As we won't drop each entry invidually with swap_entry_put() now, do reclaim in free_swap_and_cache_nr() because swap_entries_put_map_nr() is general routine to drop reference and the relcaim work should only be done in free_swap_and_cache_nr(). Remove stale comment accordingly. Signed-off-by: Kemeng Shi Reviewed-by: Tim Chen Reviewed-by: Baoquan He --- mm/swapfile.c | 70 +++++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 38 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index 6f11619665e8..646efccdd2ec 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1455,25 +1455,10 @@ struct swap_info_struct *get_swap_device(swp_entry_t entry) return NULL; } -static unsigned char swap_entry_put(struct swap_info_struct *si, - swp_entry_t entry) -{ - struct swap_cluster_info *ci; - unsigned long offset = swp_offset(entry); - unsigned char usage; - - ci = lock_cluster(si, offset); - usage = swap_entry_put_locked(si, ci, entry, 1); - unlock_cluster(ci); - - return usage; -} - -static bool swap_entries_put_nr(struct swap_info_struct *si, - swp_entry_t entry, int nr) +static bool swap_entries_put_map(struct swap_info_struct *si, + swp_entry_t entry, int nr) { unsigned long offset = swp_offset(entry); - unsigned int type = swp_type(entry); struct swap_cluster_info *ci; bool has_cache = false; unsigned char count; @@ -1484,14 +1469,10 @@ static bool swap_entries_put_nr(struct swap_info_struct *si, count = swap_count(data_race(si->swap_map[offset])); if (count != 1 && count != SWAP_MAP_SHMEM) goto fallback; - /* cross into another cluster */ - if (nr > SWAPFILE_CLUSTER - offset % SWAPFILE_CLUSTER) - goto fallback; ci = lock_cluster(si, offset); if (!swap_is_last_map(si, offset, nr, &has_cache)) { - unlock_cluster(ci); - goto fallback; + goto locked_fallback; } if (!has_cache) swap_entries_free(si, ci, entry, nr); @@ -1503,15 +1484,34 @@ static bool swap_entries_put_nr(struct swap_info_struct *si, return has_cache; fallback: - for (i = 0; i < nr; i++) { - if (data_race(si->swap_map[offset + i])) { - count = swap_entry_put(si, swp_entry(type, offset + i)); - if (count == SWAP_HAS_CACHE) - has_cache = true; - } else { - WARN_ON_ONCE(1); - } + ci = lock_cluster(si, offset); +locked_fallback: + for (i = 0; i < nr; i++, entry.val++) { + count = swap_entry_put_locked(si, ci, entry, 1); + if (count == SWAP_HAS_CACHE) + has_cache = true; + } + unlock_cluster(ci); + return has_cache; + +} + +static bool swap_entries_put_map_nr(struct swap_info_struct *si, + swp_entry_t entry, int nr) +{ + int cluster_nr, cluster_rest; + unsigned long offset = swp_offset(entry); + bool has_cache = false; + + cluster_rest = SWAPFILE_CLUSTER - offset % SWAPFILE_CLUSTER; + while (nr) { + cluster_nr = min(nr, cluster_rest); + has_cache |= swap_entries_put_map(si, entry, cluster_nr); + cluster_rest = SWAPFILE_CLUSTER; + nr -= cluster_nr; + entry.val += cluster_nr; } + return has_cache; } @@ -1806,7 +1806,7 @@ void free_swap_and_cache_nr(swp_entry_t entry, int nr) /* * First free all entries in the range. */ - any_only_cache = swap_entries_put_nr(si, entry, nr); + any_only_cache = swap_entries_put_map_nr(si, entry, nr); /* * Short-circuit the below loop if none of the entries had their @@ -1816,13 +1816,7 @@ void free_swap_and_cache_nr(swp_entry_t entry, int nr) goto out; /* - * Now go back over the range trying to reclaim the swap cache. This is - * more efficient for large folios because we will only try to reclaim - * the swap once per folio in the common case. If we do - * swap_entry_put() and __try_to_reclaim_swap() in the same loop, the - * latter will get a reference and lock the folio for every individual - * page but will only succeed once the swap slot for every subpage is - * zero. + * Now go back over the range trying to reclaim the swap cache. */ for (offset = start_offset; offset < end_offset; offset += nr) { nr = 1; From patchwork Tue Mar 25 16:25:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 14028185 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 BC5A5C3600B for ; Tue, 25 Mar 2025 07:30:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ACB3B280008; Tue, 25 Mar 2025 03:30:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A7BB528000A; Tue, 25 Mar 2025 03:30:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 91CA9280008; Tue, 25 Mar 2025 03:30:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 73DC328000A for ; Tue, 25 Mar 2025 03:30:04 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 69CA6BB292 for ; Tue, 25 Mar 2025 07:30:05 +0000 (UTC) X-FDA: 83259249570.05.87BA8CE Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) by imf21.hostedemail.com (Postfix) with ESMTP id 0F1621C0013 for ; Tue, 25 Mar 2025 07:30:02 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=none; spf=none (imf21.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.56) smtp.mailfrom=shikemeng@huaweicloud.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742887803; 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; bh=iFDR8t5KM5HJ52zX81OYj/zuu15U/MwIUesj9wQTiVg=; b=7hrmAYGRZN/GD89Ab49FAQ3Sx590RqyKN/pvsNe2qkUpFW8Akb43nf0FUt0Q7rgBcYGzyu O7S2imsopYC2bNsE38U+0yRINbvRHm4sMvy38tj8d3vfu+N0UYo/G44dYPkP9Gm0kcWGZD QNdNqCAEhTpUAd0/oyJxO/zCxLRIM4k= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742887803; a=rsa-sha256; cv=none; b=vKBFqutVt7w0JzIyBoBOvul4clByF9NyWuxk+KjAAcSGPa1y+GKREKlfD0AUgsOx8NJE9v 6Q7ggxmlPryYiwSMxs3bDwZz4e9Ouaf2bDhbrzX+/u95BXWApXu1lTtRHXsPno5k9SUeJZ eU/2a0QN3T/pSLzovuZQyiT34LiDht8= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=none; spf=none (imf21.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.56) smtp.mailfrom=shikemeng@huaweicloud.com; dmarc=none Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4ZMM4Z6njmz4f3jYH for ; Tue, 25 Mar 2025 15:29:34 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id CD93F1A199D for ; Tue, 25 Mar 2025 15:29:57 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.101.6]) by APP2 (Coremail) with SMTP id Syh0CgB3M2ZxW+JnZofaHQ--.14216S9; Tue, 25 Mar 2025 15:29:57 +0800 (CST) From: Kemeng Shi To: akpm@linux-foundation.org Cc: kasong@tencent.com, tim.c.chen@linux.intel.com, bhe@redhat.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 7/8] mm: swap: factor out helper to drop cache of entries within a single cluster Date: Wed, 26 Mar 2025 00:25:27 +0800 Message-Id: <20250325162528.68385-8-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20250325162528.68385-1-shikemeng@huaweicloud.com> References: <20250325162528.68385-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: Syh0CgB3M2ZxW+JnZofaHQ--.14216S9 X-Coremail-Antispam: 1UD129KBjvJXoW7WryftFWUuFWrKw1xWF1kGrg_yoW8ZFy8pF yagwn8Kr48Xr13Gw4Sqw45JayFv3yxW3W2qFy7Gr1av3Z3Jr10gFyqyrWa9r98Cr95uF98 Ca4DKry2gF4jyF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPab4IE77IF4wAFF20E14v26rWj6s0DM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M2 8IrcIa0xkI8VA2jI8067AKxVWUAVCq3wA2048vs2IY020Ec7CjxVAFwI0_Xr0E3s1l8cAv FVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVW7JVWDJw A2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE 3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr2 1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv 67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lc7CjxVAaw2 AFwI0_JF0_Jw1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAq x4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r 1DMIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_JFI_Gr1lIxAIcVC0I7IYx2IY6xkF 7I0E14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxV WUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjxU s3kuDUUUU X-CM-SenderInfo: 5vklyvpphqwq5kxd4v5lfo033gof0z/ X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 0F1621C0013 X-Stat-Signature: sniipuhsbrwqtwfixmoej9aweqysn1cu X-HE-Tag: 1742887802-461140 X-HE-Meta: U2FsdGVkX1/1E1JP+2JIRwZ8feNzROlHGNNMb9A+besaR+5uy6NASYXk1TaWM+3k6wHsxpbb6jpsFpTYyMyg0SJAoPsZfGHp7UL5ehIvcEP9j0p44sH3FikQ7Hll/T7s0GtLq2h9bo0i/CqFOyF1RMY3wyfno6UqCtxeONyWWh9QAIAG8gVsqK+yp0h7BR/7t7gXpdIOd1kCkLrfHEnkgkt+eGISVn++jVFcoG8zcufQ+7xq0B1320SflJ8UUoC7cv21MlfJEJTZGeUSDsSjf4R/mljwSzeks03YwNmu1Zb+3l24kfprBbbXKnKzBlumaWcSQ92ybde7nwsUhXUo51+IWMzLWfsqV6bYINCy+FYaHWvaopB72/s6eo89AWuhMtyPzskKSC+PKgWa4woMFJJFHEkueXPiWXqCooYIvAkgZCd/NXqeQv6TUfyLO20XQvJEL3UYNuugKkireYRWcHENJmSxmnsp5cMJPdNNeOqCPb6ZHcYWpS6UBEKJIs3m09gz4o5V89L3lDWAe82rOrU4x21GREiOe2R7YF+Qnso2AgrJNXhYwiIXb024FeJYaWrFJOMdilCb+XDZweU76Clr3ycyAkevnh0AGhBdJ9hTBM7iHNMyPh9rjLuJCf91c32LS54SmuV8nGzUNKj0X+zIJK7QJ7G5kb03CMR64/R6SRf5i75HglzKy8cHXmeue+wX2fMfnplVOxvDUXouoSAS4pBvanBcP+9izyFvGIPqZ5UEw1X68kG+Xe7922ch6iD/YdNt8N2pgpFiusVUCyY9fx8o+QToZrZd7ZiR+CHW1yyJPofJpG6C9oyuVs7Ve6BFha0kAM+u7L3u4J6ImpQxy73SE7M/kfg2kl/orc4DpsEcOlUiEnDQuPnme9Ep8rxN1VrkPPM5TjEKRyuYdWXJpy2ztBB143Yj1QWtwudhWUTjMwpaYvMasD+r+qwhMpAg79CrbGbr+NJj5f7 yVMu/i5s x2qBf0wBAVw2qK9FV3hF5W8anYewr+VYEIvlSmxw3Rpp3l0hPY63qzGfzYIEvKnefn9nvRfowju5Thdgs48Ngs+2qVlT0BBtg40uAD6nN7QxkG0C/HZFeV0YDMOidZgRi6V6w08usNjrGY+9U7r3lNJQWvBcqJaeeF+ZH6i35kMVyCjWGuRp9cDfu3bbBXpyuohqYYPdKyjmSfFnXMN5pyJ/VISx7ve2+5ZJx 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: Factor out helper swap_entries_put_cache() from put_swap_folio() to serve as a general-purpose routine for dropping cache flag of entries within a single cluster. Signed-off-by: Kemeng Shi Reviewed-by: Tim Chen Reviewed-by: Baoquan He --- mm/swapfile.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index 646efccdd2ec..40a7d75c01e8 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1455,6 +1455,22 @@ struct swap_info_struct *get_swap_device(swp_entry_t entry) return NULL; } +static void swap_entries_put_cache(struct swap_info_struct *si, + swp_entry_t entry, int nr) +{ + unsigned long offset = swp_offset(entry); + struct swap_cluster_info *ci; + + ci = lock_cluster(si, offset); + if (swap_only_has_cache(si, offset, nr)) + swap_entries_free(si, ci, entry, nr); + else { + for (int i = 0; i < nr; i++, entry.val++) + swap_entry_put_locked(si, ci, entry, SWAP_HAS_CACHE); + } + unlock_cluster(ci); +} + static bool swap_entries_put_map(struct swap_info_struct *si, swp_entry_t entry, int nr) { @@ -1595,8 +1611,6 @@ void swap_free_nr(swp_entry_t entry, int nr_pages) */ void put_swap_folio(struct folio *folio, swp_entry_t entry) { - unsigned long offset = swp_offset(entry); - struct swap_cluster_info *ci; struct swap_info_struct *si; int size = 1 << swap_entry_order(folio_order(folio)); @@ -1604,14 +1618,7 @@ void put_swap_folio(struct folio *folio, swp_entry_t entry) if (!si) return; - ci = lock_cluster(si, offset); - if (swap_only_has_cache(si, offset, size)) - swap_entries_free(si, ci, entry, size); - else { - for (int i = 0; i < size; i++, entry.val++) - swap_entry_put_locked(si, ci, entry, SWAP_HAS_CACHE); - } - unlock_cluster(ci); + swap_entries_put_cache(si, entry, size); } int __swap_count(swp_entry_t entry) From patchwork Tue Mar 25 16:25:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kemeng Shi X-Patchwork-Id: 14028184 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 7AAB0C36008 for ; Tue, 25 Mar 2025 07:30:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5ADED280006; Tue, 25 Mar 2025 03:30:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3C84B280008; Tue, 25 Mar 2025 03:30:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1F4E3280006; Tue, 25 Mar 2025 03:30:04 -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 E9514280007 for ; Tue, 25 Mar 2025 03:30:03 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id D3B6681196 for ; Tue, 25 Mar 2025 07:30:04 +0000 (UTC) X-FDA: 83259249528.03.6F5219B Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by imf19.hostedemail.com (Postfix) with ESMTP id 770DF1A0007 for ; Tue, 25 Mar 2025 07:30:02 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=none; spf=none (imf19.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742887803; 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; bh=eDcecE7ywDggFmIF4cUnutAAE6EHM/8tQ4gRrnhl1oQ=; b=MnWfTu+a2WbECuCqePfyWtGn4FlVXG16KP3+cGVmF1YjeRaSWvb9X/dJVPlmV7Y86t1l9O bur0Af06e5p6M0Hu1u93QznNPmzywC8VQXSEqnegWukd/5M3WdUQOPPWdWKfPx88bZFt1M r4xyTE5cxdg4yB5CfZQnY2lYYj9iudI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742887803; a=rsa-sha256; cv=none; b=ROA7hzx52DyonG8j2pbkLS1GY1y2KVrgD+0P1DKq0NsM3MhsBDxzgbc2H7Un6f6P20+QU0 jJPTXWp4cjLm4YjOrbjo0+8rHH13eNMRDrncpRmEI2cRGnp94HZtxcuIITKRsvjkcpn6Hz zI48ITA9Ub8xixMq3YU0qUDNjDcKisw= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=none; spf=none (imf19.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com; dmarc=none Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4ZMM4Y5g47z4f3lgS for ; Tue, 25 Mar 2025 15:29:33 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 2B3B01A1400 for ; Tue, 25 Mar 2025 15:29:58 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.101.6]) by APP2 (Coremail) with SMTP id Syh0CgB3M2ZxW+JnZofaHQ--.14216S10; Tue, 25 Mar 2025 15:29:58 +0800 (CST) From: Kemeng Shi To: akpm@linux-foundation.org Cc: kasong@tencent.com, tim.c.chen@linux.intel.com, bhe@redhat.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 8/8] mm: swap: replace cluster_swap_free_nr() with swap_entries_put_[map/cache]() Date: Wed, 26 Mar 2025 00:25:28 +0800 Message-Id: <20250325162528.68385-9-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20250325162528.68385-1-shikemeng@huaweicloud.com> References: <20250325162528.68385-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: Syh0CgB3M2ZxW+JnZofaHQ--.14216S10 X-Coremail-Antispam: 1UD129KBjvJXoWxCF1DJr1rCFWUGryxXF4rGrg_yoW5Xw43pF 93Wwn8Kr4xJr1xGr4fXw4DZFya93yxW3WUXFy7Ww1rZasFkryIqF1vyrZ7Cry5G34kuFZI k3W7tr9xuF4Yyr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPSb4IE77IF4wAFF20E14v26rWj6s0DM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M280x2IEY4vEnII2IxkI6r1a6r45M2 8IrcIa0xkI8VA2jI8067AKxVWUAVCq3wA2048vs2IY020Ec7CjxVAFwI0_Xr0E3s1l8cAv FVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVW7JVWDJw A2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE 3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr2 1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv 67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lc7CjxVAaw2 AFwI0_JF0_Jw1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAq x4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r 1DMIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_JFI_Gr1lIxAIcVC0I7IYx2IY6xkF 7I0E14v26F4j6r4UJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI 0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7I U09YFtUUUUU== X-CM-SenderInfo: 5vklyvpphqwq5kxd4v5lfo033gof0z/ X-Stat-Signature: 9tkpim7ep7qu5kswj11qi9wgkjb5ajbi X-Rspam-User: X-Rspamd-Queue-Id: 770DF1A0007 X-Rspamd-Server: rspam08 X-HE-Tag: 1742887802-222913 X-HE-Meta: U2FsdGVkX19mdgxDkV3xR7rHKsy2yUfMVgZfyuVBRvswjkwk4IMDWusvYoSrWdEgpSeGwpDjXnWBs+iU4MYJtR3bNG+wfdoUC9SIiQTXa7/PPHJZvSbrK0AI/qR4/uRW/X9loWjMvr+JPDEJNGx/A6lKBvGOxXOC7D3uXwkkiwpwOBvRrvJY6QsQ9MkRT+2zZjwPLdIroKBe655R/1+CHIqxe1dp+hgY3AYxgvou33AzRd47OQab/yXLsYEyTDmSt1fHIW7MWpSm+lLrTU71RU1YEqcj7/6ZqG/AB81SROA6DvTT5K4uHir016kD6omZy8ZGHuMgz8CSOawvDBMjKvQfooguIlpi0Fz/mPkZf91GKEh5JtjmG2q/gksLPoOZGVqYCZqIjKPd+ZO6VuMdzM0bwlXfuSnxA95BRRPPd1Mz5MbKaj9Yp10v5qrmS7S/smJpM3hsBhr7XXP7OGrZGSqfoukJnIIBDpbIPj4lxWzWtbf0BWEOH1k7jAQHWwN8zINjbBMTMm/KhBabv89AjDCKJ1DccfiLYwJ5Gk8QC1RNaQNsL5oFSP/YU8cVIf90BipbJUXmAltJTqwhiLVxgOt/nDod30otTeXgf6drRqjDXoNxBwi/J4v5ZhVxO4j5O74C9QYvKMHqu7xenizj00b+V2qP3tRAchA1nM63gnHglp7yg3TjRkmfRc9vMqDPhVo1kbaMOxPLe2aCbMbuhG2siQJNOZb7zvLkpFIsJTpYJzc+wTHOWmjyQ4ISGbPW2IgjK8V3YWmvDqApoYWKHKe1Kdwzju/uQ4dWF8Sd+esuExVWtt7kUKcgkBoEk+XP52GIawy8GIqp/98jIStep1JxClcKjGxmd8lZH2sVKWagZv6iX3wmen4Cd2l5ntV5B4weKdl/KbiJPf7ROI4xEV56P/Xu0FIswWlb6/OS4X+UtFYmjO9jaBXBLYqUmybsAeHzitK+o2Fzz720OVf ATxe+ww4 YAhGGA1rjPNN5Smpadk+iNbFsJrOHmATJDuMdueD0j/zOWXdk5c+2cp2sBMHx+t0ej8HFbsv0wr84zX5eirEXvB/qZFZkxkMytl8bI2QoVzTRG6/mQ+gASxfZcmHM4VuHqmgr+7d+PDl+F3PZ8uNYRADEho2ujCgfVcIlFNqFeBzV3LA2kxHLTF9VfjwD3j0Y8kWyHIcyyWMrmoUewORFwZ0BAxHAqOUeTarUbwNj6OKnXdVEnHOtTfCOEB3qxG+tS1H6WIN2MhKWblzFDvD/8C8Qig== 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: Replace cluster_swap_free_nr() with swap_entries_put_[map/cache]() to remove repeat code and leverage batch-remove for entries with last flag. After removing cluster_swap_free_nr, only functions with "_nr" suffix could free entries spanning cross clusters. Add corresponding description in comment of swap_entries_put_map_nr() as is first function with "_nr" suffix and have a non-suffix variant function swap_entries_put_map(). Signed-off-by: Kemeng Shi Reviewed-by: Tim Chen Reviewed-by: Baoquan He --- mm/swapfile.c | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index 40a7d75c01e8..c46b56d636af 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1512,6 +1512,11 @@ static bool swap_entries_put_map(struct swap_info_struct *si, } +/* + * Only functions with "_nr" suffix are able to free entries spanning + * cross multi clusters, so ensure the range is within a single cluster + * when freeing entries with functions without "_nr" suffix. + */ static bool swap_entries_put_map_nr(struct swap_info_struct *si, swp_entry_t entry, int nr) { @@ -1569,21 +1574,6 @@ static void swap_entries_free(struct swap_info_struct *si, partial_free_cluster(si, ci); } -static void cluster_swap_free_nr(struct swap_info_struct *si, - unsigned long offset, int nr_pages, - unsigned char usage) -{ - struct swap_cluster_info *ci; - unsigned long end = offset + nr_pages; - - ci = lock_cluster(si, offset); - do { - swap_entry_put_locked(si, ci, swp_entry(si->type, offset), - usage); - } while (++offset < end); - unlock_cluster(ci); -} - /* * Caller has made sure that the swap device corresponding to entry * is still around or has not been recycled. @@ -1600,7 +1590,7 @@ void swap_free_nr(swp_entry_t entry, int nr_pages) while (nr_pages) { nr = min_t(int, nr_pages, SWAPFILE_CLUSTER - offset % SWAPFILE_CLUSTER); - cluster_swap_free_nr(sis, offset, nr, 1); + swap_entries_put_map(sis, swp_entry(sis->type, offset), nr); offset += nr; nr_pages -= nr; } @@ -3623,11 +3613,13 @@ int swapcache_prepare(swp_entry_t entry, int nr) return __swap_duplicate(entry, SWAP_HAS_CACHE, nr); } +/* + * Caller should ensure entries belong to the same folio so + * the entries won't span cross cluster boundary. + */ void swapcache_clear(struct swap_info_struct *si, swp_entry_t entry, int nr) { - unsigned long offset = swp_offset(entry); - - cluster_swap_free_nr(si, offset, nr, SWAP_HAS_CACHE); + swap_entries_put_cache(si, entry, nr); } struct swap_info_struct *swp_swap_info(swp_entry_t entry)