From nobody Mon Jun 8 05:28:16 2026 Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE548480DCD for ; Wed, 3 Jun 2026 13:05:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491954; cv=none; b=XIa/PDLU+Rmzht1Aa0dRFLKGlvLauJheVpqYO39yuiGsbtgeFMB2NyzB2vAnFdRiyg6gYnEQcRlwZQWK2IyvOYPjtHp17iMYgPkQYQW9BHaJb93AbP7yRvHP80UNC1YJ6O3JHZ06QTWsWrCnMqaBSlqy59pax9GDjT7+V8VP/dY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491954; c=relaxed/simple; bh=B2zySw4XfRB2t18q7HPRhKqCF62NY7gTd3VMGsHZBCA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sX8KMNRLfSRy6bL5qzSfJylkF+LK/LsDM5MwRa+hJakR8L5G5JU88kDaWMzrHQM78zWpqZMBHH2JA2iVG3Bu/TWMHHSct6ORjmvNz6OsbplOusfpSpztzEOR2ifYN4wK69QgE5mlUXE8wLxmS7yoGlXiGNbgHv8G+8DbwMU21CE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=tEuldEzR; arc=none smtp.client-ip=209.85.210.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="tEuldEzR" Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-8423f420455so1637858b3a.3 for ; Wed, 03 Jun 2026 06:05:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780491952; x=1781096752; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=iZmim4euVDCn+80CwcLTmPjvLnCY+FRk6xMurYlZYXg=; b=tEuldEzRI8O0rPCqMtDAmjm0wEYdD2eVnedz0H4LjFxUrcqQkaaLQjdzY7EQmtKSha HMohwkd8x5WTQftiVkUp1YwZq/AYMBQ9GALbfC04L+dJSR6ms8Moy6FPrJ7oyYoUl46j KEU8kMv7DMNY6nxn5ogFF9LgZYX0iz07u3cVcZk08g7iRZ3bHvnAC8vqiMlQn9ETtON4 aZfSnWzeqXZw3kWpx9U8Ui1QrI1ka/gSrMq1mkwiq+zhDvLwmt2uPCOxurpgo/yq5kBb mkOWwgq+ZSvVSkKSYKvXHnoTnU/cV7ZxzCIplPzChaaZOERRqBO7+tJ+QXANNatDcJ2S mY3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780491952; x=1781096752; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=iZmim4euVDCn+80CwcLTmPjvLnCY+FRk6xMurYlZYXg=; b=Fxo8c/vZGIFd9yR97AMorRw9/AHF9GnWlDpansw/s6vJtq9hA5L5upLV601QrnbLhE sBv4P9f3BYwMX0ThFnQc3RyDbXDCkiiNZEQxyXkwC3dXETj0ZSBmMdVHpRakalmzepm/ d+SwJpYQAXsra4NxiYhyOqjo0+Nt4LtfT1y8bxjqeu7/TTb29soLPEWtzeQZBtHXjHZO S4W78/NHQYoYcfsZqoOnsnUdfZlh2ynCsjWTzULDNXlpoL4HgFdfK5filS4EwmkEzLog ziXeBvJaetSaTotNTxRLa/Y0F6z2NhCAcCyEYalX2aVzmBR1PMegnFvNEmrQzum0yz0n AKTw== X-Forwarded-Encrypted: i=1; AFNElJ+JMBTcZsuN+Z+05LaalcS2D7CMutoRRRmQfkdMBnW5jRvwFonz0OSNCDT0iazUUMYisMLY7ZFKRxhr9BQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+HWMw9pFK1sH6aYAOHpAJAFqKA0M1TQXg6G35br3ykOy+HaJG 96ru6R1Z/9kmvrViEUYkOYJc7RMhLu2fLXPC3Snpsyfa8RoJI2Mn2Nbf X-Gm-Gg: Acq92OENhXMtNUEd2n/aBVvp88aDXarrGO5NfuZgC8DwN41O+/tgB0CK2/G/UZ0HtY5 Bm5nYFyim+75Bq+KvfgO3GDWAc1vv82vqi3E42NjF/u9JJROdZ7Ny8XlXaKBEa+33wJnE7Jan39 Xj4NXApR8cgYUeP2ZfnVUutpW1MzM5pWDaLcYrkD9uZ2z9odRUgR/Xphg+ai/OqyoNk2gJFIq1s fcs+wqIvsuc0jdY6lrtakw6haQ6OARQAO/2JC1OrIcT18y0Jkp9teNH1Do+JEuq0LSIJ1u2y3mz kPHZYLjIVViFrox9t1ithcbpPXgnkXddMjz6XEsCYBPT/0syjJQH3P9YPVIiQPL9SUKmY6h8ncT l9PgVL4RKyYyDGtzs84iXmjAkBF12zGMCVqyjs9i/yMQs8RClfJwYATrVZx+JQqN+pQizB90olH UsNuyTYxUBoBGrph96obryzsFhGovtVImFwsRMUxeOqx+3Xz+2dxkEd/SOqh2AU3Wnj+wWhAfD5 5HGA7kB1og= X-Received: by 2002:a05:6a00:6c86:b0:837:e9cc:d470 with SMTP id d2e1a72fcca58-84284e3dfd9mr3361328b3a.20.1780491951832; Wed, 03 Jun 2026 06:05:51 -0700 (PDT) Received: from NV-J4GCB44.localdomain ([103.74.125.162]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-842828821d0sm3018661b3a.28.2026.06.03.06.05.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 06:05:51 -0700 (PDT) From: Jianyue Wu Date: Wed, 03 Jun 2026 21:05:32 +0800 Subject: [PATCH v4 1/3] mm/swap: colocate page-cluster sysctl with swap readahead Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260603-ch-swap-series-plus-folio-lru-cleanup-v4-1-ce0219e100d9@gmail.com> References: <20260603-ch-swap-series-plus-folio-lru-cleanup-v4-0-ce0219e100d9@gmail.com> In-Reply-To: <20260603-ch-swap-series-plus-folio-lru-cleanup-v4-0-ce0219e100d9@gmail.com> To: Andrew Morton , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Baoquan He , Barry Song , Youngjun Park , Qi Zheng , Shakeel Butt , Axel Rasmussen , Yuanchu Xie , Wei Xu , Johannes Weiner , David Hildenbrand , Michal Hocko , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Hugh Dickins , Baolin Wang , Jonathan Corbet , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Jianyue Wu X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openssh-sha256; t=1780491936; l=5961; i=wujianyue000@gmail.com; s=id_ed25519; h=from:subject:message-id; bh=B2zySw4XfRB2t18q7HPRhKqCF62NY7gTd3VMGsHZBCA=; b=U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgW51Zh3v9nG0Wlld2Ti8ylp1TnO7yB H+z9CbXty/WEAQAAAAGcGF0YXR0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5AAAA QCBfGpKO1jJ3e4xC0R/6gCIE6NYRVNWuLXftrS8cDrAnF7gu9fkKd1hTFnTgY8bBkkBWjlsSmjt xBhvb2olpogg= X-Developer-Key: i=wujianyue000@gmail.com; a=openssh; fpr=SHA256:gVWBPJbHGWlCIw+V8F63Ff0k21S7AB5+rZt8+huemvg page_cluster and the vm.page-cluster sysctl are only used by swap-in readahead in swap_state.c. Move them out of swap.c together with swap_readahead_setup(), and make page_cluster static to that file. Rename swap_setup() while moving it as well. The helper is internal to MM and now only sets up swap readahead defaults and its sysctl hook, so the more specific name matches its reduced scope. swap_setup() previously lived in mm/swap.c, which is built unconditionally, so the vm.page-cluster sysctl was registered also on CONFIG_SWAP=3Dn kernels. swap_readahead_setup() is now a no-op stub when CONFIG_SWAP is disabled, so vm.page-cluster is no longer registered there. The knob only tunes swap-in readahead and had no effect without swap. Suggested-by: Baoquan He Suggested-by: Barry Song Signed-off-by: Jianyue Wu Acked-by: David Hildenbrand (Arm) Acked-by: Johannes Weiner Reviewed-by: Barry Song Suggested-by: Johannes Weiner --- include/linux/swap.h | 1 - mm/swap.c | 36 ------------------------------------ mm/swap.h | 8 ++++++-- mm/swap_state.c | 37 +++++++++++++++++++++++++++++++++++++ mm/vmscan.c | 2 +- 5 files changed, 44 insertions(+), 40 deletions(-) diff --git a/include/linux/swap.h b/include/linux/swap.h index 636d94108166..5bd6f1d5984a 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -345,7 +345,6 @@ extern void lru_add_drain_cpu_zone(struct zone *zone); extern void lru_add_drain_all(void); void folio_deactivate(struct folio *folio); void folio_mark_lazyfree(struct folio *folio); -extern void swap_setup(void); =20 /* linux/mm/vmscan.c */ extern unsigned long zone_reclaimable_pages(struct zone *zone); diff --git a/mm/swap.c b/mm/swap.c index 588f50d8f1a8..e4b3dadaa6dc 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -43,10 +43,6 @@ #define CREATE_TRACE_POINTS #include =20 -/* How many pages do we try to swap or page in/out together? As a power of= 2 */ -int page_cluster; -static const int page_cluster_max =3D 31; - struct cpu_fbatches { /* * The following folio batches are grouped together because they are prot= ected @@ -1171,35 +1167,3 @@ void lru_reparent_memcg(struct mem_cgroup *memcg, st= ruct mem_cgroup *parent, int lruvec_reparent_lru(child_lruvec, parent_lruvec, lru, nid); } #endif - -static const struct ctl_table swap_sysctl_table[] =3D { - { - .procname =3D "page-cluster", - .data =3D &page_cluster, - .maxlen =3D sizeof(int), - .mode =3D 0644, - .proc_handler =3D proc_dointvec_minmax, - .extra1 =3D SYSCTL_ZERO, - .extra2 =3D (void *)&page_cluster_max, - } -}; - -/* - * Perform any setup for the swap system - */ -void __init swap_setup(void) -{ - unsigned long megs =3D PAGES_TO_MB(totalram_pages()); - - /* Use a smaller cluster for small-memory machines */ - if (megs < 16) - page_cluster =3D 2; - else - page_cluster =3D 3; - /* - * Right now other parts of the system means that we - * _really_ don't want to cluster much more - */ - - register_sysctl_init("vm", swap_sysctl_table); -} diff --git a/mm/swap.h b/mm/swap.h index 8742b82cd0db..f860f8c669e8 100644 --- a/mm/swap.h +++ b/mm/swap.h @@ -9,8 +9,6 @@ struct mempolicy; struct swap_iocb; struct swap_memcg_table; =20 -extern int page_cluster; - #if defined(MAX_POSSIBLE_PHYSMEM_BITS) #define SWAP_CACHE_PFN_BITS (MAX_POSSIBLE_PHYSMEM_BITS - PAGE_SHIFT) #elif defined(MAX_PHYSMEM_BITS) @@ -96,6 +94,8 @@ struct swap_ops { }; =20 #ifdef CONFIG_SWAP +void swap_readahead_setup(void); + #include /* for swp_offset */ #include /* for bio_end_io_t */ =20 @@ -345,6 +345,10 @@ static inline unsigned int folio_swap_flags(struct fol= io *folio) } =20 #else /* CONFIG_SWAP */ +static inline void swap_readahead_setup(void) +{ +} + static inline struct swap_cluster_info *swap_cluster_lock( struct swap_info_struct *si, pgoff_t offset, bool irq) { diff --git a/mm/swap_state.c b/mm/swap_state.c index b9613026950e..692dfcd89bcd 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -22,10 +22,15 @@ #include #include #include +#include #include "internal.h" #include "swap_table.h" #include "swap.h" =20 +/* Swap readahead cluster size, as a power of 2 pages. */ +static int page_cluster; +static const int page_cluster_max =3D 31; + /* * swapper_space is a fiction, retained to simplify the path through * vmscan's shrink_folio_list. @@ -986,6 +991,38 @@ struct folio *swapin_readahead(swp_entry_t entry, gfp_= t gfp_mask, return folio; } =20 +static const struct ctl_table swap_readahead_sysctl_table[] =3D { + { + .procname =3D "page-cluster", + .data =3D &page_cluster, + .maxlen =3D sizeof(int), + .mode =3D 0644, + .proc_handler =3D proc_dointvec_minmax, + .extra1 =3D SYSCTL_ZERO, + .extra2 =3D (void *)&page_cluster_max, + } +}; + +/** + * swap_readahead_setup - defaults and sysctl for swap cache readahead clu= stering + */ +void __init swap_readahead_setup(void) +{ + unsigned long megs =3D PAGES_TO_MB(totalram_pages()); + + /* Use a smaller cluster for small-memory machines */ + if (megs < 16) + page_cluster =3D 2; + else + page_cluster =3D 3; + /* + * Right now other parts of the system means that we + * _really_ don't want to cluster much more + */ + + register_sysctl_init("vm", swap_readahead_sysctl_table); +} + #ifdef CONFIG_SYSFS static ssize_t vma_ra_enabled_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) diff --git a/mm/vmscan.c b/mm/vmscan.c index 2d44ebfebdea..e34f1565f42f 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -7651,7 +7651,7 @@ static int __init kswapd_init(void) { int nid; =20 - swap_setup(); + swap_readahead_setup(); for_each_node_state(nid, N_MEMORY) kswapd_run(nid); register_sysctl_init("vm", vmscan_sysctl_table); --=20 2.43.0 From nobody Mon Jun 8 05:28:16 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 19F6243E9DF for ; Wed, 3 Jun 2026 13:05:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491961; cv=none; b=roPTHjlnhAKQi/Rqv0ryQ/Sd2sw8pVC5OfgcH6QwwNjPisuFHqAgPMTFPs2dUj4wsxTYsLf+EY1Uxb/PHovvNf/yS7UQvxHwyuTDvihuEUtEzyNBbY866HFJk6UDxObGhwicDtXHBnRIOs3lQmcOkVMn+RWsfOkqrBPwD2asWSw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491961; c=relaxed/simple; bh=fe/ffXXpEMnAu0iQ+HjGa5E0GG/1Zp1/KxR6Zcf8GxY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Skx7Y3nAHjff3MZJuEpDzvlUDLGAzC/7GYJZ3+GXz4fUAN7fj+279+JvoOMeeGjV1Mu+jJ9VddMfuV7Ltv1zhw6ejd4krE0tJykvVmy4bHHAY6x67ll/Rzc3yfF60PfZGkjkK2NM2yoQoDakBnVoC/NZTov2ZyiHlbH2EkWbJnY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=cYs/zsd5; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cYs/zsd5" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-8423f52af13so2425943b3a.2 for ; Wed, 03 Jun 2026 06:05:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780491959; x=1781096759; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=0z7POWPxUcFIdIcrd03eVKzZ+Q9s/sXeL4bwE5y/l2Q=; b=cYs/zsd5W3tUUd9vl7J6N+7qhBvJ3QK0y3U/KGCnCQ3VAdjnHdo0VDUPuQTrlgjzho KNQBIpQmGGgCq2JieaFK+y02CghBBjVs9VmPOqyJcShaprnqfOBWzgTM/9uZPgdC1Qkj vuUGDuGGI/15n/gww+pgB7nIpNIm8Jz+SQMkVgxvM8vX74DIeWJfL2rGixjl0W05CUwu Hu4GXy6bzJQmcmkEB2c5GltN5ItJkpCu+Ytkko/wi7HeThpIusGOxbaaYD4VHnPD4i5Y r3wrrG3LqTzXyWAqZ/oU4bGgPxKkekrQcZWtMzyb2B8cq+BTOT67gmF8245/TYL/wlOG oHzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780491959; x=1781096759; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=0z7POWPxUcFIdIcrd03eVKzZ+Q9s/sXeL4bwE5y/l2Q=; b=W1AGBzoFksvrOYMo6F82bxOS0TBWyFmCK6H75s/QFPG+ZSWzDFqqLDewRhR238tlsM HpBXnp6gbaug/KrguNSKdZRoOCiz0DD5nElgXB6MeklO3weQFcuntRTjiAdfh166beNe 8lYfYZOvQar6tw7/r3iip8qfVR+Pkmy22BkfD3tZdC8HoRDhkG1I6X+tTiaf5VVuaZrw QydsndXlLzRQWMLkpaJ/XrhU7WJPpd6oJ5YFXxO6aDHn4rI28cGkiqCA4It0hkMF7aS8 GQLoX+dfz2UdCY+9CCuYdL996Honwk3OlqqOBNFdYDBTVMGUZg1aBz30ckpcuWFI8hL+ FB8g== X-Forwarded-Encrypted: i=1; AFNElJ/s3A5BH+AltOYZVxQ3eGPtiW62lsDBpfq2264EqCDNGow/NMYUGE+ZKgmTWLbR8HKrjG0NPHJGAUasuh4=@vger.kernel.org X-Gm-Message-State: AOJu0YyrqTjezSWAQy9x7syjNe0vrVRZemJiPE9xWtHd/JQGCl1bNZoe Vk4OW2p4Pe69BbGHwb5hkoMQZ8gxW33aqY9QIMDXMWaoDXq7rU5kDwEd X-Gm-Gg: Acq92OEUvcji7icomoP/KwsjEuLVZy7wa4dmrGH8sxYSkkpUaDCsOpz1YsgsuchvwTZ MqQM++bBP7A+vD7miQtAylJTqRqpzgAmoZt1imTSbDMDYb5eoU+cLCbHAdiLKc/BPNvhaOqKjzR LxPC2uLy99BDZwY9WlLffnQPVZVKnmeEyCwpHNzeKq2oEK1B3TAr8JQ3UhJW6tX55TQ0vqABoXm BZBHoyGsmhgBoyPUyKonCIj4fFLDfSDXmRHUPrzC7ftN+dZZsRybsdJOgzzKN8UpdnrPAMQicIf vGohtyXlnNDCE9cPkljdR2oeceHjqol2e0s/1uloVhUzhD+qVXJnW+q6zEeo2tMB5qYpkAvpErs yZsQsC6RRgc6k7qlvEwRssKRc4ORocTjiowixRr7NW2rXJxEwrp9ikFefPYHybH4CmJ8JCk8c2L Bttj7zsCrG8yH61qUPaKEu1Jwb/GbSdP4RKmNScvOftjQy+gRIm0MWOb4tiZyIIILpA4/GM8rYW L/68oBI5yE= X-Received: by 2002:a05:6a00:a588:b0:82c:6b46:271d with SMTP id d2e1a72fcca58-84284f2ab8dmr3244777b3a.48.1780491959261; Wed, 03 Jun 2026 06:05:59 -0700 (PDT) Received: from NV-J4GCB44.localdomain ([103.74.125.162]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-842828821d0sm3018661b3a.28.2026.06.03.06.05.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 06:05:58 -0700 (PDT) From: Jianyue Wu Date: Wed, 03 Jun 2026 21:05:33 +0800 Subject: [PATCH v4 2/3] mm: rename swap.c to folio_lru.c Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260603-ch-swap-series-plus-folio-lru-cleanup-v4-2-ce0219e100d9@gmail.com> References: <20260603-ch-swap-series-plus-folio-lru-cleanup-v4-0-ce0219e100d9@gmail.com> In-Reply-To: <20260603-ch-swap-series-plus-folio-lru-cleanup-v4-0-ce0219e100d9@gmail.com> To: Andrew Morton , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Baoquan He , Barry Song , Youngjun Park , Qi Zheng , Shakeel Butt , Axel Rasmussen , Yuanchu Xie , Wei Xu , Johannes Weiner , David Hildenbrand , Michal Hocko , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Hugh Dickins , Baolin Wang , Jonathan Corbet , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Jianyue Wu X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openssh-sha256; t=1780491936; l=3861; i=wujianyue000@gmail.com; s=id_ed25519; h=from:subject:message-id; bh=fe/ffXXpEMnAu0iQ+HjGa5E0GG/1Zp1/KxR6Zcf8GxY=; b=U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgW51Zh3v9nG0Wlld2Ti8ylp1TnO7yB H+z9CbXty/WEAQAAAAGcGF0YXR0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5AAAA QFMGdSY7BAbK8+cAIhTQmlj4XbCHh0sKNvEnlqBKWenwp5XcnSXEtNnzgQ5T5Q5dW+PSUXUNHaL Meb9KsDapkQs= X-Developer-Key: i=wujianyue000@gmail.com; a=openssh; fpr=SHA256:gVWBPJbHGWlCIw+V8F63Ff0k21S7AB5+rZt8+huemvg Rename mm/swap.c to mm/folio_lru.c so the filename better matches the code's main responsibility. This keeps the implementation split from swap-specific code without changing the published LRU helper interfaces. Update MAINTAINERS and the remaining mm/swap.c documentation references after the rename. Suggested-by: Baoquan He Suggested-by: David Hildenbrand Signed-off-by: Jianyue Wu Acked-by: David Hildenbrand (Arm) Acked-by: Johannes Weiner --- Documentation/admin-guide/sysctl/vm.rst | 3 --- Documentation/core-api/mm-api.rst | 2 +- MAINTAINERS | 3 +-- mm/Makefile | 2 +- mm/{swap.c =3D> folio_lru.c} | 10 +++------- 5 files changed, 6 insertions(+), 14 deletions(-) diff --git a/Documentation/admin-guide/sysctl/vm.rst b/Documentation/admin-= guide/sysctl/vm.rst index 97e12359775c..2b9513371324 100644 --- a/Documentation/admin-guide/sysctl/vm.rst +++ b/Documentation/admin-guide/sysctl/vm.rst @@ -19,9 +19,6 @@ The files in this directory can be used to tune the opera= tion of the virtual memory (VM) subsystem of the Linux kernel and the writeout of dirty data to disk. =20 -Default values and initialization routines for most of these -files can be found in mm/swap.c. - Currently, these files are in /proc/sys/vm: =20 - admin_reserve_kbytes diff --git a/Documentation/core-api/mm-api.rst b/Documentation/core-api/mm-= api.rst index aabdd3cba58e..d6d189b9a996 100644 --- a/Documentation/core-api/mm-api.rst +++ b/Documentation/core-api/mm-api.rst @@ -117,7 +117,7 @@ More Memory Management Functions .. #kernel-doc:: mm/hmm.c (build warnings) .. kernel-doc:: mm/memremap.c .. kernel-doc:: mm/hugetlb.c -.. kernel-doc:: mm/swap.c +.. kernel-doc:: mm/folio_lru.c .. kernel-doc:: mm/memcontrol.c .. #kernel-doc:: mm/memory-tiers.c (build warnings) .. kernel-doc:: mm/shmem.c diff --git a/MAINTAINERS b/MAINTAINERS index e3ee97f5474e..6bd39e0afceb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -16900,7 +16900,7 @@ F: Documentation/admin-guide/mm/multigen_lru.rst F: Documentation/mm/multigen_lru.rst F: include/linux/mm_inline.h F: include/linux/mmzone.h -F: mm/swap.c +F: mm/folio_lru.c F: mm/vmscan.c F: mm/workingset.c =20 @@ -17045,7 +17045,6 @@ F: include/linux/swap.h F: include/linux/swapfile.h F: include/linux/swapops.h F: mm/page_io.c -F: mm/swap.c F: mm/swap.h F: mm/swap_table.h F: mm/swap_state.c diff --git a/mm/Makefile b/mm/Makefile index eff9f9e7e061..5f712f9bbe73 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -50,7 +50,7 @@ endif =20 obj-y :=3D filemap.o mempool.o oom_kill.o fadvise.o \ maccess.o page-writeback.o folio-compat.o \ - readahead.o swap.o truncate.o vmscan.o shrinker.o \ + readahead.o folio_lru.o truncate.o vmscan.o shrinker.o \ shmem.o util.o mmzone.o vmstat.o backing-dev.o \ mm_init.o percpu.o slab_common.o \ compaction.o show_mem.o \ diff --git a/mm/swap.c b/mm/folio_lru.c similarity index 99% rename from mm/swap.c rename to mm/folio_lru.c index e4b3dadaa6dc..46924a797ead 100644 --- a/mm/swap.c +++ b/mm/folio_lru.c @@ -1,17 +1,13 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * linux/mm/swap.c + * linux/mm/folio_lru.c * * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds */ =20 /* - * This file contains the default values for the operation of the - * Linux VM subsystem. Fine-tuning documentation can be found in - * Documentation/admin-guide/sysctl/vm.rst. - * Started 18.12.91 - * Swap aging added 23.2.95, Stephen Tweedie. - * Buffermem limits added 12.3.98, Rik van Riel. + * Folio LRU helpers: add/remove folios from LRU lists, batching, + * activation/deactivation, and page cache release paths. */ =20 #include --=20 2.43.0 From nobody Mon Jun 8 05:28:16 2026 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 74708481664 for ; Wed, 3 Jun 2026 13:06:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491968; cv=none; b=nMZSEA+RlriM5SBfwx3BDe1Tcjc09VRl9bYXk7ZD6nShr7d4ddexKkkzKFGs8191kC1D81ztncigWnjSsOTzNH3UGoG48QB6N7EsijQvfW/ff34D5bthVVbh4cjn//138XcJOf/C8HEQBHIuhfNZiJ0mx7hmxTFDhXO9pE/WO4U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491968; c=relaxed/simple; bh=T6kHT+p1VwjYophqk0ehEJosMAed3iZy1b1M7R+o828=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RLOVucBnAzhGvz+mecDD/x/S/o2rmJTGGwjGQvmdVIh0yfgDTDPS5aX3sDHUKWFs9NDDmukvEloZG4nQ4oslTKKpbKUAgJdnlXxH3wxA6AdrxF8fkN2RKIUEphEijt6K4u4y+l+5tJQ17Yb3d2fUjdl3rVGAeXRYpdvi6G3bAjg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gSmbqBMJ; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gSmbqBMJ" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-c8585cd8400so1681493a12.3 for ; Wed, 03 Jun 2026 06:06:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780491967; x=1781096767; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/AdEtlgwKVGn3OjI19JPJND+SGmb9+Nc9aTPH09hmBU=; b=gSmbqBMJ/YP8JsRsqmbQd5yjAL1yE6abCB23bDKeTykWFEpag2l5toFAj5+3lV3nlf wzHw2h/1AgHz2myN0YQ667V18oGeTVKOEoP+sy2tWi5V5u69I5KwIFMSBczPg0tUIHFn A5oOsvcUOMn9DyVFFqqVUE+mrxdevXCBj8ttM+FcIQ9fVBk/pXD3MOllmjN+tsdNOE+6 zPYTM3eTLNjnxLyvkEljZIMA7Wf3wG/oxkyQqn2j4RUl/cjGm+05dpJCzaM9OoO7A2dT zoTjwY+1YlstIlQdQwkeuhh+Y+fyF0rr1CcnCBwNOovXvjK1pbeqD0+qlPdErCwdodA8 hCLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780491967; x=1781096767; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=/AdEtlgwKVGn3OjI19JPJND+SGmb9+Nc9aTPH09hmBU=; b=QNDG8fxxzlUIbuQbqCjGCR43qm83R19x/nHtRTa8klMtKHpuiicptmobthWUl22z25 9jGssjX09T83t0KTRpuFqi8Hnk8e0mSMEQVh23NRjgvVxA0Ht05MtymVEGAKGj0j0UoD iVByAsdm8ucDt0xcxWIqj8AmA3GpLyD3f0h8R6TG+drunVSS756UCvOBZmX3NvNu/KVe ZuzB+ORjI1vXXPgdju9/aEW/YKFoPt6VD9W7mxDhbQnAAC9zLnVdvvwNvbIZbkPWB4s3 5kpjqCpd/Xj31zOE4/x87MQgPVMbLVwAIR6lJ7QxGNzwbgMDCGyHLcxryWAL31Bz6dkH mZqg== X-Forwarded-Encrypted: i=1; AFNElJ9ywUuqkjSLAG50HhTsBkLkcZ4tebJvdy0DO4K9pBwz8FmYDu343zY+f5/luZSMFZQojGPG4bVwJMS6ckk=@vger.kernel.org X-Gm-Message-State: AOJu0YwYEpkBic3VuJ9Pnb5bvoh07725OKeP7DTlOeQVOW9JhvFaSuzh QIp2QcX/hQ+OjvUaVK9fTZwlfD0nShS0FHfaUuPThC36RXcaIpTUj+cF X-Gm-Gg: Acq92OEgeQf4ld2v94tsuNM3TpZKEjl7DjYDIFuhfGc/LJGhC+S2YXk85hp4hoHan3L WG71CDLp8GPd/TGL++Fj6JOTumfyHtW4FoCQaxKof3rianHiY5Z9npvQ6p05rnhsnIRddt0rb5J 4rCbJ2SoVcLeoUvpMg02Jw5Bw0y3hqJX6BgQ4LZJa/wb1B4/IpeOBYcWjT2VtMj2oTL+C++0FAv D/y3AkvsuCGH/cWLGC40ZfrzsM7Ik35OBdQfQomZ1CLWemMs7oFYQYc4mADgenwD3zejI9sXzEH mQmEh7J5IphBdLE2YeFWWKQehYjJkv/ag1rK0jMWma0cMPpcW1SBgFltr7O5q4eMQ+rrUGD4EB6 J0gvqXZFKDP2Pmf52TdbLbpeA2hlbBLof2XFT4p0FdJ+87iAVeKZLETutYR/TgsHyZQxunbRdMm ek52oU7f8ASjKd9rQK92nCtarTIgKgyoEedXKmmrWMkO0td+ZuDIBwXO5I+KSak1dHN+MXiVasC cN5oE9y5MY= X-Received: by 2002:a05:6a00:340b:b0:82c:d7c4:4c5c with SMTP id d2e1a72fcca58-84284ea24f6mr3094033b3a.20.1780491966627; Wed, 03 Jun 2026 06:06:06 -0700 (PDT) Received: from NV-J4GCB44.localdomain ([103.74.125.162]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-842828821d0sm3018661b3a.28.2026.06.03.06.05.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 06:06:06 -0700 (PDT) From: Jianyue Wu Date: Wed, 03 Jun 2026 21:05:34 +0800 Subject: [PATCH v4 3/3] mm: move reclaim-internal declarations out of swap.h Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260603-ch-swap-series-plus-folio-lru-cleanup-v4-3-ce0219e100d9@gmail.com> References: <20260603-ch-swap-series-plus-folio-lru-cleanup-v4-0-ce0219e100d9@gmail.com> In-Reply-To: <20260603-ch-swap-series-plus-folio-lru-cleanup-v4-0-ce0219e100d9@gmail.com> To: Andrew Morton , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Baoquan He , Barry Song , Youngjun Park , Qi Zheng , Shakeel Butt , Axel Rasmussen , Yuanchu Xie , Wei Xu , Johannes Weiner , David Hildenbrand , Michal Hocko , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Hugh Dickins , Baolin Wang , Jonathan Corbet , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Jianyue Wu X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openssh-sha256; t=1780491936; l=7974; i=wujianyue000@gmail.com; s=id_ed25519; h=from:subject:message-id; bh=T6kHT+p1VwjYophqk0ehEJosMAed3iZy1b1M7R+o828=; b=U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgW51Zh3v9nG0Wlld2Ti8ylp1TnO7yB H+z9CbXty/WEAQAAAAGcGF0YXR0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5AAAA QD4bVWhMe8NLfW7WaNlCFAwsZgMqQhUe7WFiFzMCNG3jj26NJzsItffE/f0Y0lHspxRMIi1Z50i ycVwcPcdRAAY= X-Developer-Key: i=wujianyue000@gmail.com; a=openssh; fpr=SHA256:gVWBPJbHGWlCIw+V8F63Ff0k21S7AB5+rZt8+huemvg Keep include/linux/swap.h focused on swap-facing interfaces by moving MM-internal reclaim and workingset declarations into mm/internal.h. Leave the small set of LRU helper declarations that are used outside mm/ in swap.h so this cleanup does not need a new public header under include/linux/. Suggested-by: Barry Song Suggested-by: Baoquan He Signed-off-by: Jianyue Wu Acked-by: Johannes Weiner --- include/linux/swap.h | 74 +++++-------------------------------------------= ---- mm/internal.h | 68 +++++++++++++++++++++++++++++++++++++++++++++++ mm/memfd.c | 1 + 3 files changed, 76 insertions(+), 67 deletions(-) diff --git a/include/linux/swap.h b/include/linux/swap.h index 5bd6f1d5984a..5c0d92613a35 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -292,39 +292,19 @@ static inline swp_entry_t page_swap_entry(struct page= *page) return entry; } =20 -/* linux/mm/workingset.c */ -bool workingset_test_recent(void *shadow, bool file, bool *workingset, - bool flush); -void workingset_age_nonresident(struct lruvec *lruvec, unsigned long nr_pa= ges); -void *workingset_eviction(struct folio *folio, struct mem_cgroup *target_m= emcg); -void workingset_refault(struct folio *folio, void *shadow); -void workingset_activation(struct folio *folio); - /* linux/mm/page_alloc.c */ extern unsigned long totalreserve_pages; =20 /* Definition of global_zone_page_state not available yet */ #define nr_free_pages() global_zone_page_state(NR_FREE_PAGES) =20 +/* linux/mm/folio_lru.c */ +void folio_add_lru(struct folio *folio); +void folio_mark_accessed(struct folio *folio); +void lru_add_drain_all(void); =20 -/* linux/mm/swap.c */ -void lru_note_cost_unlock_irq(struct lruvec *lruvec, bool file, - unsigned int nr_io, unsigned int nr_rotated); -void lru_note_cost_refault(struct folio *); -void folio_add_lru(struct folio *); -void folio_add_lru_vma(struct folio *, struct vm_area_struct *); -void mark_page_accessed(struct page *); -void folio_mark_accessed(struct folio *); - -static inline bool folio_may_be_lru_cached(struct folio *folio) -{ - /* - * Holding PMD-sized folios in per-CPU LRU cache unbalances accounting. - * Holding small numbers of low-order mTHP folios in per-CPU LRU cache - * will be sensible, but nobody has implemented and tested that yet. - */ - return !folio_test_large(folio); -} +/* linux/mm/folio-compat.c */ +void mark_page_accessed(struct page *page); =20 extern atomic_t lru_disable_count; =20 @@ -333,42 +313,7 @@ static inline bool lru_cache_disabled(void) return atomic_read(&lru_disable_count); } =20 -static inline void lru_cache_enable(void) -{ - atomic_dec(&lru_disable_count); -} - -extern void lru_cache_disable(void); -extern void lru_add_drain(void); -extern void lru_add_drain_cpu(int cpu); -extern void lru_add_drain_cpu_zone(struct zone *zone); -extern void lru_add_drain_all(void); -void folio_deactivate(struct folio *folio); -void folio_mark_lazyfree(struct folio *folio); - /* linux/mm/vmscan.c */ -extern unsigned long zone_reclaimable_pages(struct zone *zone); -extern unsigned long try_to_free_pages(struct zonelist *zonelist, int orde= r, - gfp_t gfp_mask, nodemask_t *mask); -unsigned long lruvec_lru_size(struct lruvec *lruvec, enum lru_list lru, in= t zone_idx); - -#define MEMCG_RECLAIM_MAY_SWAP (1 << 1) -#define MEMCG_RECLAIM_PROACTIVE (1 << 2) -#define MIN_SWAPPINESS 0 -#define MAX_SWAPPINESS 200 - -/* Just reclaim from anon folios in proactive memory reclaim */ -#define SWAPPINESS_ANON_ONLY (MAX_SWAPPINESS + 1) - -extern unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *memcg, - unsigned long nr_pages, - gfp_t gfp_mask, - unsigned int reclaim_options, - int *swappiness); -extern unsigned long mem_cgroup_shrink_node(struct mem_cgroup *mem, - gfp_t gfp_mask, bool noswap, - pg_data_t *pgdat, - unsigned long *nr_scanned); extern unsigned long shrink_all_memory(unsigned long nr_pages); extern int vm_swappiness; long remove_mapping(struct address_space *mapping, struct folio *folio); @@ -389,11 +334,6 @@ static inline void reclaim_unregister_node(struct node= *node) } #endif /* CONFIG_SYSFS && CONFIG_NUMA */ =20 -#ifdef CONFIG_NUMA -extern int sysctl_min_unmapped_ratio; -extern int sysctl_min_slab_ratio; -#endif - void check_move_unevictable_folios(struct folio_batch *fbatch); =20 extern void __meminit kswapd_run(int nid); @@ -553,7 +493,7 @@ static inline int mem_cgroup_swappiness(struct mem_cgro= up *memcg) =20 void lru_reparent_memcg(struct mem_cgroup *memcg, struct mem_cgroup *paren= t, int nid); #else -static inline int mem_cgroup_swappiness(struct mem_cgroup *mem) +static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg) { return READ_ONCE(vm_swappiness); } diff --git a/mm/internal.h b/mm/internal.h index 5602393054f3..1744bb6b3222 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -24,6 +24,74 @@ =20 struct folio_batch; =20 +/* mm/workingset.c */ +bool workingset_test_recent(void *shadow, bool file, bool *workingset, + bool flush); +void workingset_age_nonresident(struct lruvec *lruvec, unsigned long nr_pa= ges); +void *workingset_eviction(struct folio *folio, + struct mem_cgroup *target_memcg); +void workingset_refault(struct folio *folio, void *shadow); +void workingset_activation(struct folio *folio); + +/* mm/folio_lru.c */ +void lru_note_cost_unlock_irq(struct lruvec *lruvec, bool file, + unsigned int nr_io, unsigned int nr_rotated) + __releases(lruvec->lru_lock); +void lru_note_cost_refault(struct folio *folio); +void folio_add_lru_vma(struct folio *folio, struct vm_area_struct *vma); + +static inline bool folio_may_be_lru_cached(struct folio *folio) +{ + /* + * Holding PMD-sized folios in per-CPU LRU cache unbalances accounting. + * Holding small numbers of low-order mTHP folios in per-CPU LRU cache + * will be sensible, but nobody has implemented and tested that yet. + */ + return !folio_test_large(folio); +} + +static inline void lru_cache_enable(void) +{ + atomic_dec(&lru_disable_count); +} + +void lru_cache_disable(void); +void lru_add_drain(void); +void lru_add_drain_cpu(int cpu); +void lru_add_drain_cpu_zone(struct zone *zone); +void folio_deactivate(struct folio *folio); +void folio_mark_lazyfree(struct folio *folio); + +/* mm/vmscan.c */ +unsigned long zone_reclaimable_pages(struct zone *zone); +unsigned long try_to_free_pages(struct zonelist *zonelist, int order, + gfp_t gfp_mask, nodemask_t *mask); +unsigned long lruvec_lru_size(struct lruvec *lruvec, enum lru_list lru, + int zone_idx); + +#define MEMCG_RECLAIM_MAY_SWAP (1 << 1) +#define MEMCG_RECLAIM_PROACTIVE (1 << 2) +#define MIN_SWAPPINESS 0 +#define MAX_SWAPPINESS 200 + +/* Just reclaim from anon folios in proactive memory reclaim */ +#define SWAPPINESS_ANON_ONLY (MAX_SWAPPINESS + 1) + +unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *memcg, + unsigned long nr_pages, + gfp_t gfp_mask, + unsigned int reclaim_options, + int *swappiness); +unsigned long mem_cgroup_shrink_node(struct mem_cgroup *memcg, + gfp_t gfp_mask, bool noswap, + pg_data_t *pgdat, + unsigned long *nr_scanned); + +#ifdef CONFIG_NUMA +extern int sysctl_min_unmapped_ratio; +extern int sysctl_min_slab_ratio; +#endif + /* * Maintains state across a page table move. The operation assumes both so= urce * and destination VMAs already exist and are specified by the user. diff --git a/mm/memfd.c b/mm/memfd.c index abe13b291ddc..6c72fe6caef7 100644 --- a/mm/memfd.c +++ b/mm/memfd.c @@ -19,6 +19,7 @@ #include #include #include +#include "internal.h" #include "swap.h" =20 /* --=20 2.43.0