All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pratyush Yadav <pratyush@kernel.org>
To: Chenghao Duan <duanchenghao@kylinos.cn>
Cc: pasha.tatashin@soleen.com,  rppt@kernel.org,
	 pratyush@kernel.org, akpm@linux-foundation.org,
	 linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	 jianghaoran@kylinos.cn
Subject: Re: [PATCH v3 6/7] mm/memfd_luo: remove folio from page cache when accounting fails
Date: Thu, 02 Apr 2026 11:52:57 +0000	[thread overview]
Message-ID: <2vxzzf3lfujq.fsf@kernel.org> (raw)
In-Reply-To: <20260326084727.118437-7-duanchenghao@kylinos.cn> (Chenghao Duan's message of "Thu, 26 Mar 2026 16:47:26 +0800")

On Thu, Mar 26 2026, Chenghao Duan wrote:

> In memfd_luo_retrieve_folios(), when shmem_inode_acct_blocks() fails
> after successfully adding the folio to the page cache, the code jumps
> to unlock_folio without removing the folio from the page cache.
>
> This leaves the folio permanently abandoned in the page cache:
> - The folio was added via shmem_add_to_page_cache() which set up
>   mapping, index, and incremented nrpages/shmem stats.
> - folio_unlock() and folio_put() do not remove it from the cache.
> - folio_add_lru() was never called, so it cannot be reclaimed.

This is just not true. The folio is _not_ "permanently abandoned" in the
page cache. When fput() is called by memfd_luo_retrieve(), it will
eventually call shmem_undo_range() on the whole mapping and free all the
folios in there.

I went and looked at shmem_undo_range() and the accompanying accounting
logic, and all that seems to be impervious to this type of superfluous
folio in the filemap. Main reason being that shmem_recalc_inode()
directly uses mapping->nrpages after truncation so even if you don't
account for the folio, as long as you get rid of the whole file (which
we do) it doesn't matter.

I think the only place I can see this causing trouble is maybe in LRU
accounting, though I really don't understand how any of that works so
dunno.

Anyway, I do think this patch is worth having. It keeps the filemap
clean and gets rid of the need of this complex reasoning to figure out
if this is safe.

So I think the commit message needs reworking. Perhaps something like
the below:

    mm/memfd_luo: remove folio from page cache when accounting fails

    In memfd_luo_retrieve_folios(), when shmem_inode_acct_blocks() fails
    after successfully adding the folio to the page cache, the code jumps
    to unlock_folio without removing the folio from the page cache.

    While the folio eventually will be freed when the file is released by
    memfd_luo_retrieve(), it is a good idea to directly remove a folio that
    was not fully added to the file. This avoids the possibility of
    accounting mismatches in shmem or filemap core.

    Fix by adding a remove_from_cache label that calls filemap_remove_folio()
    before unlocking, matching the error handling pattern in
    shmem_alloc_and_add_folio().

    This issue was identified by the AI review.
    https://sashiko.dev/#/patchset/20260323110747.193569-1-duanchenghao@kylinos.cn

With that,

Reviewed-by: Pratyush Yadav <pratyush@kernel.org>

>
> Fix by adding a remove_from_cache label that calls filemap_remove_folio()
> before unlocking, matching the error handling pattern in
> shmem_alloc_and_add_folio().
>
> This issue was identified by the AI review.
> https://sashiko.dev/#/patchset/20260323110747.193569-1-duanchenghao@kylinos.cn
>
> Signed-off-by: Chenghao Duan <duanchenghao@kylinos.cn>
[...]

-- 
Regards,
Pratyush Yadav


  parent reply	other threads:[~2026-04-02 11:53 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-26  8:47 [PATCH v3 0/7] Modify memfd_luo code Chenghao Duan
2026-03-26  8:47 ` [PATCH v3 1/7] mm/memfd: use folio_nr_pages() for shmem inode accounting Chenghao Duan
2026-04-02  1:23   ` Pasha Tatashin
2026-04-02 10:59   ` Pratyush Yadav
2026-03-26  8:47 ` [PATCH v3 2/7] mm/memfd_luo: optimize shmem_recalc_inode calls in retrieve path Chenghao Duan
2026-04-02 11:02   ` Pratyush Yadav
2026-04-10  1:45     ` Chenghao Duan
2026-04-16  9:35       ` Pratyush Yadav
2026-03-26  8:47 ` [PATCH v3 3/7] mm/memfd_luo: remove unnecessary memset in zero-size memfd path Chenghao Duan
2026-03-26  8:47 ` [PATCH v3 4/7] mm/memfd_luo: use i_size_write() to set inode size during retrieve Chenghao Duan
2026-03-26  8:47 ` [PATCH v3 5/7] mm/memfd_luo: fix physical address conversion in put_folios cleanup Chenghao Duan
2026-04-02  1:30   ` Pasha Tatashin
2026-04-02 11:06   ` Pratyush Yadav
2026-04-02 17:43     ` Andrew Morton
2026-03-26  8:47 ` [PATCH v3 6/7] mm/memfd_luo: remove folio from page cache when accounting fails Chenghao Duan
2026-04-02  1:32   ` Pasha Tatashin
2026-04-02 11:52   ` Pratyush Yadav [this message]
2026-04-02 17:54     ` Andrew Morton
2026-04-03  9:07       ` Pratyush Yadav
2026-03-26  8:47 ` [PATCH v3 7/7] mm/memfd_luo: fix integer overflow in memfd_luo_preserve_folios Chenghao Duan
2026-04-02  1:39   ` Pasha Tatashin
2026-04-02 12:06   ` Pratyush Yadav
2026-04-02 17:58     ` Andrew Morton
2026-04-03  9:06       ` Pratyush Yadav
2026-03-26 23:36 ` [PATCH v3 0/7] Modify memfd_luo code Andrew Morton

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=2vxzzf3lfujq.fsf@kernel.org \
    --to=pratyush@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=duanchenghao@kylinos.cn \
    --cc=jianghaoran@kylinos.cn \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=pasha.tatashin@soleen.com \
    --cc=rppt@kernel.org \
    /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.