All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kiryl Shutsemau <kirill@shutemov.name>
To: "David Hildenbrand (Arm)" <david@kernel.org>
Cc: 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>,
	linux-mm@kvack.org,  linux-kernel@vger.kernel.org,
	Chris Mason <mason@kernel.org>,
	stable@vger.kernel.org
Subject: Re: [PATCH 09/16] mm/shmem: preserve data in clean folios when splitting fails
Date: Mon, 26 Oct 2026 17:12:09 +0000	[thread overview]
Message-ID: <at-GrQNgF3V_tL3w@thinkstation> (raw)
In-Reply-To: <20261026-fixes_shmem-v1-9-703206d5fa0c@kernel.org>

On Mon, Oct 26, 2026 at 10:40:42AM +0100, David Hildenbrand (Arm) wrote:
> From: Chris Mason <mason@kernel.org>
> 
> A shared writable mapping can have dirty PTEs while its shmem folio is
> still clean. A read fault can install a writable PTE, and a later store
> sets the PTE's dirty bit without marking the folio dirty.
> 
> After shmem_undo_range() has handled the boundary folios, a concurrent
> read fault into a hole below the new EOF can allocate a large folio.
> For example, on a tmpfs mount with huge=always, the fault's offset must
> be within the file, but the allocated folio can extend beyond i_size.
> The final scan then finds this folio and calls
> truncate_inode_partial_folio() without marking it dirty.

This is hard to follow. I asked LLM for a diagram. I think it would be
helpful for the commit message:

CPU0: ftruncate(fd, 3M)                CPU1: MAP_SHARED, tmpfs huge=always
─────────────────────────────────────  ──────────────────────────────────
i_size = 3M
shmem_undo_range(3M, -1)
  first pass: hole, nothing to do
  boundary folio at 3M: hole, none
                                       read fault at 2M+x (below EOF)
                                         PMD folio [2M,4M), crosses EOF
                                         writable PTE, folio clean
                                       store to 2M+x
                                         PTE dirty, folio still clean
                                       vmsplice(2M+x)
                                         extra folio reference
  whole_folios: finds [2M,4M) folio
  truncate_inode_partial_folio()
    zero [3M,4M)
    folio_split()
      unmap_folio(): extra ref
        → -EAGAIN, PTE dirty bit
          never reaches the folio
    folio clean
      → truncate_inode_folio(whole)
        [2M,3M) dropped
                                       read 2M+x → refault → zeroes


> Splitting normally collects the PTE dirty bits when unmapping the
> folio. An extra reference, for example from vmsplice(), can make it
> fail before that step. The fallback unmapping on split failure excludes
> shmem, so the helper still sees a clean folio and drops it, losing data
> outside the range.
> 
> Mark large folios dirty before partial truncation in the final scan,
> as the boundary handling already does. Exclude failed-fallocate
> rollback, which must discard the folios it added.
> 
> Fix generated by an LLM and sent by Chris Mason in private.
> 
> Fixes: b9a8a4195c7d ("truncate,shmem: Handle truncates that split large folios")
> Cc: stable@vger.kernel.org
> Signed-off-by: Chris Mason <mason@kernel.org>
> [ david: simplify descriptions, adjust comments ]
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>

The fix itself looks reasonable:

Acked-by: Kiryl Shutsemau (Meta) <kas@kernel.org>

-- 
  Kiryl Shutsemau / Kirill A. Shutemov


  reply	other threads:[~2026-10-26 17:12 UTC|newest]

Thread overview: 82+ 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-27  2:22   ` sashiko-bot
2026-10-27  9:51     ` David Hildenbrand (Arm)
2026-10-27 10:10       ` Muchun Song
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-27  9:53     ` David Hildenbrand (Arm)
2026-10-26 18:32   ` Nhat Pham
2026-10-27  5:44   ` Baolin Wang
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 10:04         ` David Hildenbrand (Arm)
2026-10-27  1:34   ` Zi Yan
2026-10-27 10:03     ` David Hildenbrand (Arm)
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 [this message]
2026-10-27  6:35     ` Baolin Wang
2026-10-27 10:07     ` David Hildenbrand (Arm)
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-27  7:26   ` Baolin Wang
2026-10-26  9:40 ` [PATCH 11/16] mm/shmem: rescan after nonuniform folio splitting David Hildenbrand (Arm)
2026-10-26 17:26   ` Kiryl Shutsemau
2026-10-27  2:34     ` Zi Yan
2026-10-27  2:32   ` Zi Yan
2026-10-27  8:00     ` Baolin Wang
2026-10-27 10:12     ` David Hildenbrand (Arm)
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-27  8:59   ` Baolin Wang
2026-10-27 10:14     ` David Hildenbrand (Arm)
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-27  9:18   ` Baolin Wang
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-27 13:08     ` Baolin Wang
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)
2026-10-27  9:34       ` David Hildenbrand (Arm)
2026-10-27 11:37         ` Gregory Price (Meta)
2026-10-27 12:07           ` David Hildenbrand (Arm)

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=at-GrQNgF3V_tL3w@thinkstation \
    --to=kirill@shutemov.name \
    --cc=akpm@linux-foundation.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=brauner@kernel.org \
    --cc=chrisl@kernel.org \
    --cc=cmaiolino@redhat.com \
    --cc=david@kernel.org \
    --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=mason@kernel.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 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.