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 A40E9C4707B for ; Thu, 18 Jan 2024 11:11:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 28EC36B0083; Thu, 18 Jan 2024 06:11:37 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2483E6B0085; Thu, 18 Jan 2024 06:11:37 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0DF886B0087; Thu, 18 Jan 2024 06:11:37 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id F03E36B0083 for ; Thu, 18 Jan 2024 06:11:36 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id C66A51A0225 for ; Thu, 18 Jan 2024 11:11:36 +0000 (UTC) X-FDA: 81692166192.09.677699B Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) by imf04.hostedemail.com (Postfix) with ESMTP id 0431240003 for ; Thu, 18 Jan 2024 11:11:33 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=NXgmjCKR; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf04.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.210.180 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1705576294; 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:dkim-signature; bh=yrbTbn/Co4xZrxsx5gjY1Btb4+PFsZ1QZ40ExDZVluk=; b=AKxp6xYFcagE/UffyserdhT/pI/p7f3eGILbS+knlV28BhktEwodAwGQ32wLEibFtMq9uR QxCtJJKyG/8IE1l24LxtIwtc/GzFzeYrsqnv3Xdd4YpwxT5RzNVC+OkSLrco5auNjleBvV GZMlN8u68hb/h588YafujI+nmE16KKg= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=NXgmjCKR; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf04.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.210.180 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1705576294; a=rsa-sha256; cv=none; b=jAVCZKx2p5fBKbGAx4AwhOWmpFp+3PdAUnWLVf7jbS2ULlNxW5gjW0aHSubqZ6FHfKGkgu 27Rr1lBEXmlT1WvWFD8WttcnRYxmVcWFjjqYn812+23L4A1/8GyVk2Y99bu9kG3FQpMhAb W6VY9kyf3XvDl5zczgtzSdLg0c6lGJw= Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-6d9b13fe9e9so9249205b3a.2 for ; Thu, 18 Jan 2024 03:11:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705576293; x=1706181093; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yrbTbn/Co4xZrxsx5gjY1Btb4+PFsZ1QZ40ExDZVluk=; b=NXgmjCKRP/NGePTQnc8A+gCAW2BLnhENbj2iYTKvTLbCPkf+6JofS0iaRhcBNhpNE+ +uYROAjWG9EIRvIZbI6i/x1uee8Dv9YtTWWI+hn9XAk+rwTIbPVugnk65bbU2Jx4Du1L riJni5T8Bifv5lLXPhzZrsRRPdwrVFwUGr4314w2tfkvfCUFXHLFBkVnd0s0k7nlAH/+ bDkc63mionBB8zTH9bqjqaV4eN83/DfofS3CI4cCh2OF6HB4v2UlOM1SDTJ7Op1XD8Jj pLRm1tBhdviyzBwpKEVu5uwN03rRBLjuwzr+StP6qU8xsHd4plTU/iFRSo1hoPu5S5+W G5SA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705576293; x=1706181093; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yrbTbn/Co4xZrxsx5gjY1Btb4+PFsZ1QZ40ExDZVluk=; b=Q5di6iJltDNs38WSgh5rr69pWLBR7SaWEep0lfhRzVgqgSuJY2w1LuQMQzjcwczZee hKNF5qTGqMeOmNBwWhhmtRsHyOmhHi4kRL6br1+Z0fYPWAbELLBHys2mdles50DKPk8g IGuA91vo9W4vm1zltOmDX2KL3+Vz7aH+U4XGc+4uViH8QkhpHcZJlkO5XfHcrLHTD9J0 uCc3/v6/MK0UmsEDI0trtdxfffJrvyj/Zg3aRI72aWeTFjkhwDkCoMlQbsa38g70LqAB kYD5onutrkbyfGlFIQ/fykzv1TVTcwIduH2LkznuRDQU/KvYe6JTRmlkR72rcRzPijSS a61A== X-Gm-Message-State: AOJu0YwO/8H5QNrHpt37KgRVWtqz9QUeJFewzodh3M/DlAYfqresjsgn fX8gFu0zCxrfbCO1fAoUzJnLGzOzIuUV6c61MvBHb+HUE/r7YOj8 X-Google-Smtp-Source: AGHT+IF12opuNoryR9vVFMwwLQb6LE2P/B1s8ZwHCzxtTLJ9aOUfJO5mW5VC3XFfJkko5dyhT2a0+g== X-Received: by 2002:a05:6a00:174e:b0:6d9:bd63:e3e5 with SMTP id j14-20020a056a00174e00b006d9bd63e3e5mr689678pfc.26.1705576292986; Thu, 18 Jan 2024 03:11:32 -0800 (PST) Received: from barry-desktop.. (143.122.224.49.dyn.cust.vf.net.nz. [49.224.122.143]) by smtp.gmail.com with ESMTPSA id t19-20020a056a0021d300b006d9be753ac7sm3039107pfj.108.2024.01.18.03.11.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jan 2024 03:11:32 -0800 (PST) From: Barry Song <21cnbao@gmail.com> To: ryan.roberts@arm.com, akpm@linux-foundation.org, david@redhat.com, linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, mhocko@suse.com, shy828301@gmail.com, wangkefeng.wang@huawei.com, willy@infradead.org, xiang@kernel.org, ying.huang@intel.com, yuzhao@google.com, surenb@google.com, steven.price@arm.com, Chuanhua Han , Barry Song Subject: [PATCH RFC 2/6] mm: swap: introduce swap_nr_free() for batched swap_free() Date: Fri, 19 Jan 2024 00:10:32 +1300 Message-Id: <20240118111036.72641-3-21cnbao@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240118111036.72641-1-21cnbao@gmail.com> References: <20231025144546.577640-1-ryan.roberts@arm.com> <20240118111036.72641-1-21cnbao@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Stat-Signature: h6ma6kkq5gns4c9ht9o7cmc9j8nupxwc X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 0431240003 X-HE-Tag: 1705576293-250756 X-HE-Meta: U2FsdGVkX1+jaBVEmvXjXXLOc2OxPmTHzQGgYzb4Ub15NoNShd5Q9+QaaORsrJKBUnAEmBN6CNu/12JR3ldvCpk3jRsdnkn6bhxooAAufB8eTFB6wjX6K8sE/K9OrrcmOXORA2/8ropRAUYBRiOHC3M7bIHW1har0yiAVoIxPTCCOs+hYsMCU8i+AMbmcKF1V4VRHs5m6RrOToSsbiG8mYAOjmz2N8imVVP0Enfddzve87ULKeDP2BaUWhCIKfT4wz+Ix+S8wEBSrHD9NIZrsmMF59X2tQtV1fr9PxXzAg8jzgOf4F5m2u69wD4kLAzopOcpDRl8XQyErdZj9kzwwKWcjmJa7TNrrdLD6YLHNATB34xUQs1/JUpEhUgn7CeLN6NuEhKT5AjWREKOMJIjdBjE9yBEY1rMdqNa3gvBjvkCwPW0KzgYwG6p/mkllnBynGLoNr61g/ss7mt/rpFAY0qDh5/8kyGmW8x3sM21D4g3uixOhm73OlzSBCF5Q/4EdNo54AX/5PkHhh5Yt87ntzpiKp9hLQCY2unQGtD5ybisRfzOrsTupDTbshCvchqOC+aIaiOQnxu+Z4AYGrmSv258KAEcJojo34eJqPVCin9RAFChdqTOP2wmk2jfRPAAtBtH4Qu8AbCxo6/bYNUD+oZt8O+Th/A6EAh560APzkG6HQ4IkKWfoBThuks777yStx6gXZm7vIIeNcjE4W4UslXTB7Mmux3WWrdhF1JuwXauwrtFaizFNoN7HuK3kZzdunMHwNpJmdh6YPe+qg9Cr+1VBfsH8g0xe+tiRWNqsAwOMZ80OienxOJkQ6eXj4SF5hrwv1QnuhymrllbkL7mD/UIoXSrqzHNlnvLsu6EYocJnGsB/iAAbli8T14nhKOipk4b4waIh4qRIml0otcK1fKFHwebmS9xzj4+6IVGnESG59XO1Ni21HvnSzspWnpElvaSIPGe8ljv+FoyJpH SCMUPhuD WU5BJWbY/1A2Z2+8XwtRQxcWRB5XCwbYvMPb5dNfU3+T413/lRe/wt25ihKg6FkJ97JfYFvXrgqDZAco10l7vdaQVZCJehZxhDxxQ2IzQG4gah8jfRfoR2CnMi28PdJKLPsUXYdBjyIGF+xPmP9NSWDeoVeQk9bZ96Z8sSPTCzgQRYZNvgTSkCCszHybsoMNZxO0yggo72SMh+6UNplqUQ4wgglmdLe77AQAVsExk8eIr1wVrvXdginrnS2HWq2j6X/6HPFsWV1zB8YaGonPP3uNthdcwFL9xIe/SqAuRjcfG/CM3C7PFG1z4yRgqSOz2mI2wMxvLcXsPwslrLIrpO3jQd0NOYDraWJTbB7D8GwSDWsxi8Jot/uaHfJSkOBKUsJgXsZTHYM20jvR0y4gs810Gsem/tgjC+CVexf+z0BdL/B5vCpY4somXxXkLz442ApyuC75TUgZOqx7Inhecmg3Ib44rGjVoFReiiPskooP08o33taivvCm/9D/ubPacJwhx0dhX0xjixEYJdtFIqcKDSQ== 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: Chuanhua Han While swapping in a large folio, we need to free swaps related to the whole folio. To avoid frequently acquiring and releasing swap locks, it is better to introduce an API for batched free. Signed-off-by: Chuanhua Han Co-developed-by: Barry Song Signed-off-by: Barry Song --- include/linux/swap.h | 6 ++++++ mm/swapfile.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/include/linux/swap.h b/include/linux/swap.h index 4db00ddad261..31a4ee2dcd1c 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -478,6 +478,7 @@ extern void swap_shmem_alloc(swp_entry_t); extern int swap_duplicate(swp_entry_t); extern int swapcache_prepare(swp_entry_t); extern void swap_free(swp_entry_t); +extern void swap_nr_free(swp_entry_t entry, int nr_pages); extern void swapcache_free_entries(swp_entry_t *entries, int n); extern int free_swap_and_cache(swp_entry_t); int swap_type_of(dev_t device, sector_t offset); @@ -553,6 +554,11 @@ static inline void swap_free(swp_entry_t swp) { } +void swap_nr_free(swp_entry_t entry, int nr_pages) +{ + +} + static inline void put_swap_folio(struct folio *folio, swp_entry_t swp) { } diff --git a/mm/swapfile.c b/mm/swapfile.c index 556ff7347d5f..6321bda96b77 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1335,6 +1335,35 @@ void swap_free(swp_entry_t entry) __swap_entry_free(p, entry); } +void swap_nr_free(swp_entry_t entry, int nr_pages) +{ + int i; + struct swap_cluster_info *ci; + struct swap_info_struct *p; + unsigned type = swp_type(entry); + unsigned long offset = swp_offset(entry); + DECLARE_BITMAP(usage, SWAPFILE_CLUSTER) = { 0 }; + + VM_BUG_ON(offset % SWAPFILE_CLUSTER + nr_pages > SWAPFILE_CLUSTER); + + if (nr_pages == 1) { + swap_free(entry); + return; + } + + p = _swap_info_get(entry); + + ci = lock_cluster(p, offset); + for (i = 0; i < nr_pages; i++) { + if (__swap_entry_free_locked(p, offset + i, 1)) + __bitmap_set(usage, i, 1); + } + unlock_cluster(ci); + + for_each_clear_bit(i, usage, nr_pages) + free_swap_slot(swp_entry(type, offset + i)); +} + /* * Called after dropping swapcache to decrease refcnt to swap entries. */ -- 2.34.1