From: "David Hildenbrand (Arm)" <david@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>,
Gregory Price <gourry@gourry.net>, Zi Yan <ziy@nvidia.com>,
Joshua Hahn <joshua.hahnjy@gmail.com>,
Rakie Kim <rakie.kim@sk.com>,
Ying Huang <ying.huang@linux.alibaba.com>,
Johannes Weiner <hannes@cmpxchg.org>,
Vladimir Davydov <vdavydov.dev@gmail.com>,
Michal Hocko <mhocko@suse.com>, Hugh Dickins <hughd@google.com>,
Baolin Wang <baolin.wang@linux.alibaba.com>,
Lukas Czerner <lczerner@redhat.com>,
Carlos Maiolino <cmaiolino@redhat.com>,
Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
Daniel Verkamp <dverkamp@chromium.org>,
Jeff Xu <jeffxu@google.com>, Muchun Song <muchun.song@linux.dev>,
Oscar Salvador <osalvador@suse.de>,
David Stevens <stevensd@chromium.org>,
"Matthew Wilcox (Oracle)" <willy@infradead.org>,
William Kucharski <william.kucharski@oracle.com>,
Chris Li <chrisl@kernel.org>, Kairui Song <kasong@tencent.com>,
Nhat Pham <nphamcs@gmail.com>, Miaohe Lin <linmiaohe@huawei.com>,
Naoya Horiguchi <nao.horiguchi@gmail.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
"David Hildenbrand (Arm)" <david@kernel.org>,
stable@vger.kernel.org
Subject: [PATCH 11/16] mm/shmem: rescan after nonuniform folio splitting
Date: Mon, 26 Oct 2026 10:40:44 +0100 [thread overview]
Message-ID: <20261026-fixes_shmem-v1-11-703206d5fa0c@kernel.org> (raw)
In-Reply-To: <20261026-fixes_shmem-v1-0-703206d5fa0c@kernel.org>
The final scan in shmem_undo_range() restarts after a successful split
only if the original folio is no longer large. A nonuniform split can
leave that folio large, so the scan skips the newly created folios.
Hole punching then leaves pages within the hole allocated even though
they could be discarded.
For example, a fault below the hole can allocate a 2 MiB folio after
boundary handling. Punching a 1 MiB hole at offset 64 KiB splits the
folio successfully but leaves the original folio at order 4. The scan
continues past all 512 pages, leaving 2 MiB allocated instead of 1 MiB.
The hole reads as zero, but the pages and their block charges remain.
Restart when the original folio is still in the mapping after partial
truncation, identified by checking folio->mapping. If the helper
removed the whole folio, no rescan is needed.
Fixes: 7460b470a131f ("mm/truncate: use folio_split() in truncate operation")
Cc: stable@vger.kernel.org
Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
---
mm/shmem.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/mm/shmem.c b/mm/shmem.c
index c8608026e06ef..fcec40a2dd707 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -1487,14 +1487,11 @@ static void shmem_undo_range(struct inode *inode, loff_t lstart, uoff_t lend,
truncate_inode_folio(mapping, folio);
} else if (truncate_inode_partial_folio(folio, lstart, lend)) {
/*
- * If we split a page, reset the loop so
- * that we pick up the new sub pages.
- * Otherwise the THP was entirely
- * dropped or the target range was
- * zeroed, so just continue the loop as
- * is.
+ * If the folio was not removed, it
+ * was split. Retry the scan to find
+ * the split folios.
*/
- if (!folio_test_large(folio)) {
+ if (folio->mapping) {
folio_unlock(folio);
index = start;
break;
--
2.43.0
next prev parent reply other threads:[~2026-10-26 9:42 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-26 9:40 [PATCH 00/16] mm/shmem: various (urgent?) fixes David Hildenbrand (Arm)
2026-10-26 9:40 ` [PATCH 01/16] mm/mempolicy: charge shared policy nodes David Hildenbrand (Arm)
2026-10-26 13:38 ` Pedro Falcato
2026-10-26 15:44 ` Kiryl Shutsemau
2026-10-26 18:10 ` Zi Yan
2026-10-27 2:57 ` Baolin Wang
2026-10-26 9:40 ` [PATCH 02/16] tmpfs: keep the quota soft limits of an unused id David Hildenbrand (Arm)
2026-10-26 10:53 ` Jan Kara
2026-10-26 11:00 ` David Hildenbrand (Arm)
2026-10-26 9:40 ` [PATCH 03/16] tmpfs: preserve explicitly disabled quota limits David Hildenbrand (Arm)
2026-10-26 13:37 ` Jan Kara
2026-10-26 9:40 ` [PATCH 04/16] mm/shmem: honour F_SEAL_EXEC when an ACL is set David Hildenbrand (Arm)
2026-10-26 13:48 ` Pedro Falcato
2026-10-26 15:52 ` Kiryl Shutsemau
2026-10-26 19:07 ` Zi Yan
2026-10-27 3:45 ` Baolin Wang
2026-10-26 9:40 ` [PATCH 05/16] hugetlbfs: enforce F_SEAL_EXEC in setattr David Hildenbrand (Arm)
2026-10-26 13:49 ` Pedro Falcato
2026-10-26 15:55 ` Kiryl Shutsemau
2026-10-26 19:08 ` Zi Yan
2026-10-26 9:40 ` [PATCH 06/16] mm/shmem: hold off eviction in shmem_writeout() David Hildenbrand (Arm)
2026-10-26 15:14 ` Pedro Falcato
2026-10-26 18:44 ` Nhat Pham
2026-10-26 16:13 ` Kiryl Shutsemau
2026-10-26 18:32 ` Nhat Pham
2026-10-26 9:40 ` [PATCH 07/16] mm/shmem: avoid moving the truncation start backwards David Hildenbrand (Arm)
2026-10-26 16:30 ` Kiryl Shutsemau
2026-10-26 19:21 ` Zi Yan
2026-10-26 21:13 ` David Hildenbrand (Arm)
2026-10-26 22:39 ` Zi Yan
2026-10-26 23:16 ` Zi Yan
2026-10-26 23:24 ` David Hildenbrand (Arm)
2026-10-26 23:28 ` Zi Yan
2026-10-26 23:30 ` David Hildenbrand (Arm)
2026-10-26 9:40 ` [PATCH 08/16] mm/shmem: stop retrying folios that cannot be split David Hildenbrand (Arm)
2026-10-26 16:36 ` Kiryl Shutsemau
2026-10-26 17:08 ` David Hildenbrand (Arm)
2026-10-26 17:59 ` Kiryl Shutsemau
2026-10-27 1:34 ` Zi Yan
2026-10-26 9:40 ` [PATCH 09/16] mm/shmem: preserve data in clean folios when splitting fails David Hildenbrand (Arm)
2026-10-26 17:12 ` Kiryl Shutsemau
2026-10-27 2:00 ` Zi Yan
2026-10-26 9:40 ` [PATCH 10/16] mm/shmem: discard whole new large folios on fallocate rollback David Hildenbrand (Arm)
2026-10-26 17:15 ` Kiryl Shutsemau
2026-10-27 2:12 ` Zi Yan
2026-10-26 9:40 ` David Hildenbrand (Arm) [this message]
2026-10-26 17:26 ` [PATCH 11/16] mm/shmem: rescan after nonuniform folio splitting Kiryl Shutsemau
2026-10-27 2:34 ` Zi Yan
2026-10-27 2:32 ` Zi Yan
2026-10-26 9:40 ` [PATCH 12/16] mm/shmem: fix truncate hang in large swap entry David Hildenbrand (Arm)
2026-10-26 17:39 ` Kiryl Shutsemau
2026-10-26 9:40 ` [PATCH 13/16] mm/shmem: preserve allocation errors when swapping in large entries David Hildenbrand (Arm)
2026-10-26 17:49 ` Kiryl Shutsemau
2026-10-26 9:40 ` [PATCH 14/16] mm/shmem: fix truncate loop after boundary swapin failure David Hildenbrand (Arm)
2026-10-26 17:53 ` Kiryl Shutsemau
2026-10-26 9:40 ` [PATCH 15/16] mm/shmem: fix accounting of swapin-error markers David Hildenbrand (Arm)
2026-10-26 9:40 ` [PATCH 16/16] mm/shmem: fix truncation of files containing only " David Hildenbrand (Arm)
2026-10-26 11:11 ` [PATCH 00/16] mm/shmem: various (urgent?) fixes Baolin Wang
2026-10-26 12:12 ` David Hildenbrand (Arm)
2026-10-26 13:23 ` Kairui Song
2026-10-26 20:08 ` Gregory Price
2026-10-26 21:09 ` David Hildenbrand (Arm)
2026-10-26 21:24 ` Gregory Price (Meta)
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=20261026-fixes_shmem-v1-11-703206d5fa0c@kernel.org \
--to=david@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=brauner@kernel.org \
--cc=chrisl@kernel.org \
--cc=cmaiolino@redhat.com \
--cc=dverkamp@chromium.org \
--cc=gourry@gourry.net \
--cc=hannes@cmpxchg.org \
--cc=hughd@google.com \
--cc=jack@suse.cz \
--cc=jeffxu@google.com \
--cc=joshua.hahnjy@gmail.com \
--cc=kasong@tencent.com \
--cc=lczerner@redhat.com \
--cc=linmiaohe@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=muchun.song@linux.dev \
--cc=nao.horiguchi@gmail.com \
--cc=nphamcs@gmail.com \
--cc=osalvador@suse.de \
--cc=rakie.kim@sk.com \
--cc=stable@vger.kernel.org \
--cc=stevensd@chromium.org \
--cc=vdavydov.dev@gmail.com \
--cc=william.kucharski@oracle.com \
--cc=willy@infradead.org \
--cc=ying.huang@linux.alibaba.com \
--cc=ziy@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®