* [PATCH] fs/dax: Remove redundant deferred list initialization
@ 2026-09-03 5:02 Kaitao Cheng
2026-09-03 5:12 ` sashiko-bot
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Kaitao Cheng @ 2026-09-03 5:02 UTC (permalink / raw)
To: Dan Williams, Matthew Wilcox, Jan Kara, Alexander Viro,
Christian Brauner
Cc: Muchun Song, linux-fsdevel, nvdimm, linux-kernel, Kaitao Cheng
From: Kaitao Cheng <chengkaitao@kylinos.cn>
prep_compound_page() calls prep_compound_head(), which initializes
folio->_deferred_list for compound folios with an order greater than one.
Therefore, dax_folio_init() initializes the list twice for large DAX
folios.
Remove the redundant initialization from dax_folio_init(). This leaves
the behavior unchanged and keeps compound folio initialization
centralized in prep_compound_head().
Signed-off-by: Kaitao Cheng <chengkaitao@kylinos.cn>
---
fs/dax.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/fs/dax.c b/fs/dax.c
index 6ba50142eeb2..dad4efea7964 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -469,8 +469,6 @@ static void dax_folio_init(void *entry)
if (order > 0) {
prep_compound_page(&folio->page, order);
- if (order > 1)
- INIT_LIST_HEAD(&folio->_deferred_list);
WARN_ON_ONCE(folio_ref_count(folio));
}
}
--
2.50.1 (Apple Git-155)
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] fs/dax: Remove redundant deferred list initialization
2026-09-03 5:02 [PATCH] fs/dax: Remove redundant deferred list initialization Kaitao Cheng
@ 2026-09-03 5:12 ` sashiko-bot
2026-09-03 6:13 ` Muchun Song
2026-09-04 10:56 ` Christian Brauner
2 siblings, 0 replies; 4+ messages in thread
From: sashiko-bot @ 2026-09-03 5:12 UTC (permalink / raw)
To: Kaitao Cheng; +Cc: nvdimm
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [Critical] dax_delete_mapping_range() splits PMD entries and causes duplicate processing leading to nrpages underflow
--
commit ab9d688e10fd86aba4bb8d5161b095d144b422c0
Author: Kaitao Cheng <chengkaitao@kylinos.cn>
fs/dax: Remove redundant deferred list initialization
This commit removes the redundant initialization of folio->_deferred_list
for large DAX folios in dax_folio_init(). This is because prep_compound_head()
already handles it, leaving compound folio initialization centralized.
> diff --git a/fs/dax.c b/fs/dax.c
> index 1fbba0d21c13d..4ea0f13d53a65 100644
> --- a/fs/dax.c
> +++ b/fs/dax.c
[ ... ]
[Severity: Critical]
This isn't a bug introduced by this patch, but I noticed a potential
pre-existing issue in dax_delete_mapping_range() when it processes
multi-order DAX entries:
fs/dax.c:dax_delete_mapping_range() {
...
XA_STATE(xas, &mapping->i_pages, start_idx);
...
xas_for_each(&xas, entry, end_idx) {
if (!xa_is_value(entry))
continue;
entry = wait_entry_unlocked_exclusive(&xas, entry);
if (!entry)
continue;
dax_disassociate_entry(entry, mapping, true);
xas_store(&xas, NULL);
mapping->nrpages -= 1UL << dax_entry_order(entry);
put_unlocked_entry(&xas, entry, WAKE_ALL);
}
...
}
When deleting a mapping range on a DAX filesystem containing PMD-sized
entries, this loop uses an order-0 XA_STATE. If xas_store() encounters an
order-9 PMD entry, doesn't it split the entry into 512 order-0 entries
(one NULL and 511 copies of the PMD value)?
Because xas_advance() is not called after the store, will the iterator
continue to visit the remaining 511 split sibling slots and process the same
PMD entry again?
Since mapping->nrpages is decremented by 1UL << dax_entry_order(entry) (which
is 512 for a PMD entry) on each iteration, could this underflow the counter by
262,144 per PMD entry and result in catastrophic memory accounting corruption?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260903050207.7015-1-kaitao.cheng@linux.dev?part=1
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] fs/dax: Remove redundant deferred list initialization
2026-09-03 5:02 [PATCH] fs/dax: Remove redundant deferred list initialization Kaitao Cheng
2026-09-03 5:12 ` sashiko-bot
@ 2026-09-03 6:13 ` Muchun Song
2026-09-04 10:56 ` Christian Brauner
2 siblings, 0 replies; 4+ messages in thread
From: Muchun Song @ 2026-09-03 6:13 UTC (permalink / raw)
To: Kaitao Cheng
Cc: Dan Williams, Matthew Wilcox, Jan Kara, Alexander Viro,
Christian Brauner, linux-fsdevel, nvdimm, linux-kernel,
Kaitao Cheng
> On Sep 3, 2026, at 13:02, Kaitao Cheng <kaitao.cheng@linux.dev> wrote:
>
> From: Kaitao Cheng <chengkaitao@kylinos.cn>
>
> prep_compound_page() calls prep_compound_head(), which initializes
> folio->_deferred_list for compound folios with an order greater than one.
> Therefore, dax_folio_init() initializes the list twice for large DAX
> folios.
>
> Remove the redundant initialization from dax_folio_init(). This leaves
> the behavior unchanged and keeps compound folio initialization
> centralized in prep_compound_head().
>
> Signed-off-by: Kaitao Cheng <chengkaitao@kylinos.cn>
Acked-by: Muchun Song <muchun.song@linux.dev>
Thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] fs/dax: Remove redundant deferred list initialization
2026-09-03 5:02 [PATCH] fs/dax: Remove redundant deferred list initialization Kaitao Cheng
2026-09-03 5:12 ` sashiko-bot
2026-09-03 6:13 ` Muchun Song
@ 2026-09-04 10:56 ` Christian Brauner
2 siblings, 0 replies; 4+ messages in thread
From: Christian Brauner @ 2026-09-04 10:56 UTC (permalink / raw)
To: Dan Williams, Matthew Wilcox, Jan Kara, Alexander Viro,
Kaitao Cheng
Cc: Muchun Song, linux-fsdevel, nvdimm, linux-kernel, Kaitao Cheng
On Thu, 03 Sep 2026 13:02:07 +0800, Kaitao Cheng wrote:
> fs/dax: Remove redundant deferred list initialization
Applied to the vfs-7.4.misc branch of the vfs/vfs.git tree.
Patches in the vfs-7.4.misc branch should appear in linux-next soon.
Please report any outstanding bugs that were missed during review in a
new review to the original patch series allowing us to drop it.
It's encouraged to provide Acked-bys and Reviewed-bys even though the
patch has now been applied. If possible patch trailers will be updated.
Note that commit hashes shown below are subject to change due to rebase,
trailer updates or similar. If in doubt, please check the listed branch.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
branch: vfs-7.4.misc
[1/1] fs/dax: Remove redundant deferred list initialization
https://git.kernel.org/vfs/vfs/c/4dda2f40edd8
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-09-04 10:56 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-03 5:02 [PATCH] fs/dax: Remove redundant deferred list initialization Kaitao Cheng
2026-09-03 5:12 ` sashiko-bot
2026-09-03 6:13 ` Muchun Song
2026-09-04 10:56 ` Christian Brauner
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.