From: "Zi Yan" <ziy@nvidia.com>
To: "David Hildenbrand (Arm)" <david@kernel.org>,
"Matthew Wilcox (Oracle)" <willy@infradead.org>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Muchun Song" <muchun.song@linux.dev>,
"Lorenzo Stoakes" <ljs@kernel.org>,
"Liam R. Howlett" <liam@infradead.org>,
"Vlastimil Babka" <vbabka@kernel.org>,
"Mike Rapoport" <rppt@kernel.org>,
"Suren Baghdasaryan" <surenb@google.com>,
"Michal Hocko" <mhocko@suse.com>,
"Baolin Wang" <baolin.wang@linux.alibaba.com>,
"Nico Pache" <nico.pache@linux.dev>,
"Ryan Roberts" <ryan.roberts@arm.com>,
"Dev Jain" <dev.jain@arm.com>, "Barry Song" <baohua@kernel.org>,
"Lance Yang" <lance.yang@linux.dev>,
"Usama Arif" <usama.arif@linux.dev>,
"Gregory Price" <gourry@gourry.net>,
"Ying Huang" <ying.huang@linux.alibaba.com>,
"Alistair Popple" <apopple@nvidia.com>,
"Johannes Weiner" <hannes@cmpxchg.org>,
"Qi Zheng" <qi.zheng@linux.dev>,
"Shakeel Butt" <shakeel.butt@linux.dev>,
"Kairui Song" <kasong@tencent.com>
Cc: <linux-mm@kvack.org>, <linux-kernel@vger.kernel.org>,
"Steven Rostedt" <rostedt@goodmis.org>,
"Masami Hiramatsu" <mhiramat@kernel.org>,
"Jan Kara" <jack@suse.cz>,
"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
"Matthew Brost" <matthew.brost@intel.com>,
"Joshua Hahn" <joshua.hahnjy@gmail.com>,
"Rakie Kim" <rakie.kim@sk.com>,
"Byungchul Park" <byungchul@sk.com>,
"Axel Rasmussen" <axelrasmussen@google.com>,
"Yuanchu Xie" <yuanchu@google.com>, "Wei Xu" <weixugc@google.com>,
<linux-fsdevel@vger.kernel.org>,
<linux-trace-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 09/14] mm/page-flags: check page/folio->private instead of PG_private
Date: Wed, 09 Sep 2026 22:08:08 -0400 [thread overview]
Message-ID: <DLB9QBBHE5HE.3832WPIZAFS7H@nvidia.com> (raw)
In-Reply-To: <9395aac2-af01-42cf-92ea-4e3d5e7eec6d@kernel.org>
On Tue Sep 8, 2026 at 12:56 PM EDT, David Hildenbrand (Arm) wrote:
> On 9/8/26 04:56, Zi Yan wrote:
>> After the changes of the prior commits, page/folio->private != NULL is now
>> equivalent to checking PG_private.
>>
>> Stop checking PG_private on pages and folios and use page/folio->private
>> instead, except swapcache and hugetlb folios, because the former uses a
>> field (swp_entry_t swap) overlapping with ->private and the latter sets its
>> flags in ->private. Exclude swapcache and hugetlb when the code is meant to
>> check PG_private only. PG_swapcache and folio->swap.val cannot be set/clear
>> as a whole, so excluding swapcache with folio_test_swapcache() is not
>> reliable. Instead, use folio_test_swapbacked(), since PG_swapbacked is
>> stable when a folio is added to/removed from swapcache.
>>
>> folio_expected_ref_count() can be called without folio lock, so annotate
>> folio_test_private() with data_race() to avoid triggering race condition
>> checks. While at it, annotate folio->mapping too. Add data_race()
>> annotation for other lockless callers too.
>>
>> folio_set/clear_private() and Set/ClearPagePrivate() become no-ops.
>> PG_private is no longer checked at page free time.
>>
>> Remove KPF_PRIVATE since PG_private is no longer used.
>>
>> Assisted-by: Claude:claude-opus-4-8
>> Assisted-by: Codex:gpt-5
>> Signed-off-by: Zi Yan <ziy@nvidia.com>
>> To: Andrew Morton <akpm@linux-foundation.org>
>> To: David Hildenbrand <david@kernel.org>
>> To: Steven Rostedt <rostedt@goodmis.org>
>> To: Masami Hiramatsu <mhiramat@kernel.org>
>> To: Lorenzo Stoakes <ljs@kernel.org>
>> To: "Matthew Wilcox (Oracle)" <willy@infradead.org>
>> To: Jan Kara <jack@suse.cz>
>> To: Johannes Weiner <hannes@cmpxchg.org>
>> Cc: "Liam R. Howlett" <liam@infradead.org>
>> Cc: Vlastimil Babka <vbabka@kernel.org>
>> Cc: Mike Rapoport <rppt@kernel.org>
>> Cc: Suren Baghdasaryan <surenb@google.com>
>> Cc: Michal Hocko <mhocko@suse.com>
>> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
>> Cc: Zi Yan <ziy@nvidia.com>
>> Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
>> Cc: Nico Pache <nico.pache@linux.dev>
>> Cc: Ryan Roberts <ryan.roberts@arm.com>
>> Cc: Dev Jain <dev.jain@arm.com>
>> Cc: Barry Song <baohua@kernel.org>
>> Cc: Lance Yang <lance.yang@linux.dev>
>> Cc: Usama Arif <usama.arif@linux.dev>
>> Cc: Matthew Brost <matthew.brost@intel.com>
>> Cc: Joshua Hahn <joshua.hahnjy@gmail.com>
>> Cc: Rakie Kim <rakie.kim@sk.com>
>> Cc: Byungchul Park <byungchul@sk.com>
>> Cc: Gregory Price <gourry@gourry.net>
>> Cc: Ying Huang <ying.huang@linux.alibaba.com>
>> Cc: Alistair Popple <apopple@nvidia.com>
>> Cc: Qi Zheng <qi.zheng@linux.dev>
>> Cc: Shakeel Butt <shakeel.butt@linux.dev>
>> Cc: Kairui Song <kasong@tencent.com>
>> Cc: Axel Rasmussen <axelrasmussen@google.com>
>> Cc: Yuanchu Xie <yuanchu@google.com>
>> Cc: Wei Xu <weixugc@google.com>
>> Cc: linux-kernel@vger.kernel.org
>> Cc: linux-fsdevel@vger.kernel.org
>> Cc: linux-mm@kvack.org
>> Cc: linux-trace-kernel@vger.kernel.org
>> ---
>
> [...]
>
>> /* !PageAnon && !swapper_space */
>> diff --git a/mm/vmscan.c b/mm/vmscan.c
>> index 40d3f1b48a74c..9348ebf9de882 100644
>> --- a/mm/vmscan.c
>> +++ b/mm/vmscan.c
>> @@ -978,7 +978,8 @@ static void folio_check_dirty_writeback(struct folio *folio,
>> *writeback = folio_test_writeback(folio);
>>
>> /* Verify dirty/writeback state if the filesystem supports it */
>> - if (!folio_test_private(folio))
>> + if (!(folio_test_private(folio) && !folio_test_swapbacked(folio) &&
>> + !folio_test_hugetlb(folio)))
>
> Now that I read that check ... a fourth time? a fifth? I stopped counting :)
>
> Should we have a (in light of folio_attach_private()):
>
> static inline bool folio_has_attached_private(const struct folio *folio)
> {
> /* Careful, we might get called on unlocked folios. */
> if (!data_race(folio->private))
> return false;
> /* On some folios ->private is used for different purposes. */
> return !folio_test_swapbacked(folio) && !folio_test_hugetlb(folio);
> }
>
> Of course, adding some nice documentation what having attached private means?
Will squash the next one into this one and use
folio_has_attached_private() instead of folio_test_fs_private(), like we
discussed in Patch 10.
--
Best Regards,
Yan, Zi
next prev parent reply other threads:[~2026-09-10 2:08 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-08 2:56 [PATCH v3 00/14] Remove PG_private by using page/folio->private checks instead Zi Yan
2026-09-08 2:56 ` [f2fs-dev] " Zi Yan via Linux-f2fs-devel
2026-09-08 2:56 ` Zi Yan
2026-09-08 2:56 ` [PATCH v3 01/14] mm/zsmalloc: replace PG_private with pointer comparison Zi Yan
2026-09-08 4:11 ` Sergey Senozhatsky
2026-09-08 15:07 ` David Hildenbrand (Arm)
2026-09-08 15:21 ` Zi Yan
2026-09-09 14:07 ` David Hildenbrand (Arm)
2026-09-08 2:56 ` [PATCH v3 02/14] perf/ring_buffer: stop using PG_private as AUX page high-order marker Zi Yan
2026-09-08 3:07 ` sashiko-bot
2026-09-08 15:09 ` David Hildenbrand (Arm)
2026-09-08 2:56 ` [PATCH v3 03/14] xen/grant-table: stop setting PG_private on pages for grant mapping Zi Yan
2026-09-08 15:16 ` David Hildenbrand (Arm)
2026-09-08 15:44 ` Zi Yan
2026-09-08 2:56 ` [PATCH v3 04/14] fscrypt: stop setting PG_private on bounce page Zi Yan
2026-09-08 15:16 ` David Hildenbrand (Arm)
2026-09-08 2:56 ` [PATCH v3 05/14] mm/hugetlb: use direct assignment instead of folio_change_private() Zi Yan
2026-09-08 15:26 ` David Hildenbrand (Arm)
2026-09-08 15:28 ` Zi Yan
2026-09-08 2:56 ` [PATCH v3 06/14] f2fs: stop using PG_private Zi Yan
2026-09-08 2:56 ` [f2fs-dev] " Zi Yan via Linux-f2fs-devel
2026-09-08 15:47 ` David Hildenbrand (Arm) via Linux-f2fs-devel
2026-09-08 15:47 ` David Hildenbrand (Arm)
2026-09-08 18:20 ` [f2fs-dev] " Tal Zussman
2026-09-08 18:20 ` Tal Zussman
2026-09-09 12:48 ` [f2fs-dev] " David Hildenbrand (Arm) via Linux-f2fs-devel
2026-09-09 12:48 ` David Hildenbrand (Arm)
2026-09-09 17:47 ` Tal Zussman
2026-09-09 17:47 ` [f2fs-dev] " Tal Zussman
2026-09-10 7:35 ` David Hildenbrand (Arm)
2026-09-10 7:35 ` [f2fs-dev] " David Hildenbrand (Arm) via Linux-f2fs-devel
2026-09-10 12:21 ` Zi Yan
2026-09-10 12:21 ` [f2fs-dev] " Zi Yan via Linux-f2fs-devel
2026-09-10 21:11 ` Zi Yan
2026-09-10 21:11 ` [f2fs-dev] " Zi Yan via Linux-f2fs-devel
2026-09-13 20:11 ` Tal Zussman
2026-09-13 20:11 ` [f2fs-dev] " Tal Zussman
2026-09-10 2:41 ` Chao Yu
2026-09-10 2:41 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel
2026-09-10 7:34 ` David Hildenbrand (Arm) via Linux-f2fs-devel
2026-09-10 7:34 ` David Hildenbrand (Arm)
2026-09-10 8:43 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel
2026-09-10 8:43 ` Chao Yu
2026-09-10 9:15 ` David Hildenbrand (Arm)
2026-09-10 9:15 ` [f2fs-dev] " David Hildenbrand (Arm) via Linux-f2fs-devel
2026-09-10 14:15 ` Chao Yu
2026-09-10 14:15 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel
2026-09-08 2:56 ` [PATCH v3 07/14] erofs: mm/pagemap: add readahead_folio_last() to avoid folio->private Zi Yan
2026-09-08 16:04 ` David Hildenbrand (Arm)
2026-09-08 17:05 ` Zi Yan
2026-09-09 14:10 ` David Hildenbrand (Arm)
2026-09-08 2:56 ` [PATCH v3 08/14] erofs: use folio_attach/detach_private() instead of direct assignment Zi Yan
2026-09-08 16:13 ` David Hildenbrand (Arm)
2026-09-08 17:19 ` Zi Yan
2026-09-09 13:27 ` David Hildenbrand (Arm)
2026-09-10 2:06 ` Zi Yan
2026-09-08 2:56 ` [PATCH v3 09/14] mm/page-flags: check page/folio->private instead of PG_private Zi Yan
2026-09-08 16:56 ` David Hildenbrand (Arm)
2026-09-10 2:08 ` Zi Yan [this message]
2026-09-08 2:56 ` [PATCH v3 10/14] mm/page-flags: introduce folio_test_fs_private() Zi Yan
2026-09-08 16:59 ` David Hildenbrand (Arm)
2026-09-08 17:22 ` Zi Yan
2026-09-08 2:56 ` [PATCH v3 11/14] treewide: remove folio_set/clear_private() Zi Yan
2026-09-08 17:01 ` David Hildenbrand (Arm)
2026-09-08 17:22 ` Zi Yan
2026-09-08 2:56 ` [PATCH v3 12/14] treewide: replace PagePrivate() with page_private() Zi Yan
2026-09-09 14:18 ` David Hildenbrand (Arm)
2026-09-09 14:23 ` David Hildenbrand (Arm)
2026-09-10 2:09 ` Zi Yan
2026-09-08 2:56 ` [PATCH v3 13/14] treewide: adjust comments on PagePrivate and PG_private Zi Yan
2026-09-08 2:56 ` Zi Yan
2026-09-09 14:20 ` David Hildenbrand (Arm)
2026-09-09 14:20 ` David Hildenbrand (Arm)
2026-09-09 14:27 ` David Hildenbrand (Arm)
2026-09-09 14:27 ` David Hildenbrand (Arm)
2026-09-10 2:12 ` Zi Yan
2026-09-10 2:12 ` Zi Yan
2026-09-08 2:56 ` [PATCH v3 14/14] mm/page-flags: remove PG_private Zi Yan
2026-09-09 14:31 ` David Hildenbrand (Arm)
2026-09-09 14:48 ` Zi Yan
2026-09-09 14:50 ` David Hildenbrand (Arm)
2026-09-09 14:51 ` Zi Yan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DLB9QBBHE5HE.3832WPIZAFS7H@nvidia.com \
--to=ziy@nvidia.com \
--cc=akpm@linux-foundation.org \
--cc=apopple@nvidia.com \
--cc=axelrasmussen@google.com \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=byungchul@sk.com \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=gourry@gourry.net \
--cc=hannes@cmpxchg.org \
--cc=jack@suse.cz \
--cc=joshua.hahnjy@gmail.com \
--cc=kasong@tencent.com \
--cc=lance.yang@linux.dev \
--cc=liam@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=ljs@kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=matthew.brost@intel.com \
--cc=mhiramat@kernel.org \
--cc=mhocko@suse.com \
--cc=muchun.song@linux.dev \
--cc=nico.pache@linux.dev \
--cc=qi.zheng@linux.dev \
--cc=rakie.kim@sk.com \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=shakeel.butt@linux.dev \
--cc=surenb@google.com \
--cc=usama.arif@linux.dev \
--cc=vbabka@kernel.org \
--cc=weixugc@google.com \
--cc=willy@infradead.org \
--cc=ying.huang@linux.alibaba.com \
--cc=yuanchu@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.