From: Qiliang Yuan <qiliang.yuan@linux.dev>
To: Hugh Dickins <hughd@google.com>,
Baolin Wang <baolin.wang@linux.alibaba.com>,
Andrew Morton <akpm@linux-foundation.org>,
Jan Kara <jack@suse.cz>, Qiliang Yuan <odys.yuan@gmail.com>,
"David Hildenbrand (Arm)" <david@kernel.org>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
llvm@lists.linux.dev, kernel test robot <lkp@intel.com>,
Qiliang Yuan <qiliang.yuan@linux.dev>
Subject: [PATCH] mm/shmem: drop the second folio batch from shmem_undo_range()
Date: Wed, 11 Nov 2026 22:39:01 -0500 [thread overview]
Message-ID: <20261111-bug-mm-shmem-undo-frame-v1-1-e50a95b8f9b2@linux.dev> (raw)
shmem_undo_range() keeps a folio_batch and an array of FOLIO_BATCH_SIZE
indices on its stack. Removing truncated folios from the page cache in
batches added a second folio_batch to collect the folios to delete.
That grows the stack frame by about 200 bytes, past the 1024 byte limit
of mips eyeq6_defconfig built with clang.
Pass fbatch itself to delete_from_page_cache_batch() once the swap
entries are gone, as truncate_inode_pages_range() does. Undoing a failed
fallocate() only removes the folios that are not uptodate, so remove
those one at a time with truncate_inode_folio() as before.
Stack frame of shmem_undo_range() built with clang 18:
config before (bytes) after (bytes) change
mips eyeq6_defconfig 928 720 -22%
x86_64 920 712 -23%
Fixes: b97fbd541ecba ("mm/shmem: remove truncated folios from the page cache in batches")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202611112032.TMyPU6Rm-lkp@intel.com/
Signed-off-by: Qiliang Yuan <qiliang.yuan@linux.dev>
---
David, this applies on top of b97fbd541ecba in shmem-7.5.misc; please
fold it in if you prefer.
---
mm/shmem.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/mm/shmem.c b/mm/shmem.c
index 156469423a866..5bcbdd6078a73 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -1352,9 +1352,6 @@ static void shmem_undo_range(struct inode *inode, loff_t lstart, uoff_t lend,
index = start;
while (index < end && find_lock_entries(mapping, &index, end - 1,
&fbatch, indices)) {
- struct folio_batch remove;
-
- folio_batch_init(&remove);
for (i = 0; i < folio_batch_count(&fbatch); i++) {
folio = fbatch.folios[i];
@@ -1366,13 +1363,14 @@ static void shmem_undo_range(struct inode *inode, loff_t lstart, uoff_t lend,
continue;
}
- if (!unfalloc || !folio_test_uptodate(folio)) {
+ if (!unfalloc)
truncate_cleanup_folio(folio);
- folio_batch_add(&remove, folio);
- }
+ else if (!folio_test_uptodate(folio))
+ truncate_inode_folio(mapping, folio);
}
- delete_from_page_cache_batch(mapping, &remove);
folio_batch_remove_exceptionals(&fbatch);
+ if (!unfalloc)
+ delete_from_page_cache_batch(mapping, &fbatch);
for (i = 0; i < folio_batch_count(&fbatch); i++)
folio_unlock(fbatch.folios[i]);
folio_batch_release(&fbatch);
---
base-commit: b97fbd541ecba5d6640077618e9dfec6f5e71132
change-id: 20261111-bug-mm-shmem-undo-frame-66828e197ad5
Best regards,
--
Qiliang Yuan <qiliang.yuan@linux.dev>
next reply other threads:[~2026-11-12 3:39 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-12 3:39 Qiliang Yuan [this message]
2026-11-12 8:05 ` [PATCH] mm/shmem: drop the second folio batch from shmem_undo_range() Baolin Wang
2026-11-12 8:33 ` David Hildenbrand (Arm)
2026-11-12 9:11 ` Qiliang Yuan
2026-11-13 3:39 ` sashiko-bot
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=20261111-bug-mm-shmem-undo-frame-v1-1-e50a95b8f9b2@linux.dev \
--to=qiliang.yuan@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=david@kernel.org \
--cc=hughd@google.com \
--cc=jack@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lkp@intel.com \
--cc=llvm@lists.linux.dev \
--cc=odys.yuan@gmail.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.