From: Matthew Wilcox <willy@infradead.org>
To: Andrew Morton <akpm@linux-foundation.org>,
Jane Chu <jane.chu@oracle.com>,
linux-mm@kvack.org
Cc: Muchun Song <muchun.song@linux.dev>,
Oscar Salvador <osalvador@suse.de>,
David Hildenbrand <david@kernel.org>,
Miaohe Lin <linmiaohe@huawei.com>,
Naoya Horiguchi <nao.horiguchi@gmail.com>,
Jan Kara <jack@suse.cz>,
linux-fsdevel@vger.kernel.org,
Christian Brauner <christian@brauner.io>,
Jiaqi Yan <jiaqiyan@google.com>
Subject: Re: [PATCH v4 13/14] filemap: Add support for authoritative mappings
Date: Fri, 24 Jul 2026 17:29:42 +0100 [thread overview]
Message-ID: <amOS9nXAJDIM5KCA@casper.infradead.org> (raw)
In-Reply-To: <amOPh_oXhrIE44nE@casper.infradead.org>
On Fri, Jul 24, 2026 at 05:15:03PM +0100, Matthew Wilcox wrote:
> Sashiko review identifies only a problem identified in the previous patch.
Er, this should have been the reply to patch 12, not 13.
Sashiko review:
> --- Patch [13]: [PATCH v4 13/14] filemap: Add support for authoritative mappings ---
> commit f97ea9a8250c2693263cf2f409975e439e79ddd4
> Author: Matthew Wilcox (Oracle) <willy@infradead.org>
>
> filemap: Add support for authoritative mappings
>
> An authoritative mapping knows about all the folios in the mapping.
> If read() finds a missing folio, we know it's a zero region of the file
> and can call iov_iter_zero() instead of allocating and trying to read one.
>
> > diff --git a/mm/filemap.c b/mm/filemap.c
> > index 26a5f18121f90..5a8cc20e624e4 100644
> > --- a/mm/filemap.c
> > +++ b/mm/filemap.c
> > @@ -2697,6 +2697,8 @@ static int filemap_get_pages(struct kiocb *iocb, size_t count,
> > if (!folio_batch_count(fbatch)) {
> > DEFINE_READAHEAD(ractl, filp, &filp->f_ra, mapping, index);
> >
> > + if (mapping_is_authoritative(mapping))
> > + return 0;
> > if (iocb->ki_flags & IOCB_NOIO)
> > return -EAGAIN;
>
> Does this early return cause an infinite loop in filemap_splice_read()
> when reading a hole?
>
> When an AS_AUTHORITATIVE mapping has a hole, filemap_get_pages() now
> returns 0 and leaves fbatch empty. filemap_read() was updated in this patch
> to handle an empty batch, but filemap_splice_read() appears to assume that
> a return value of 0 means progress was made.
>
> If filemap_splice_read() receives an empty fbatch:
>
> mm/filemap.c:filemap_splice_read() {
> ...
> error = filemap_get_pages(&iocb, len, &fbatch, true);
> if (error < 0)
> break;
>
> ...
> for (i = 0; i < folio_batch_count(&fbatch); i++) {
> struct folio *folio = fbatch.folios[i];
> // updates to *ppos and len
> }
>
> folio_batch_release(&fbatch);
> } while (len);
>
> Since the for loop is skipped, len and *ppos remain unchanged, which
> could cause the outer do-while loop to spin indefinitely.
This is a latent footgun, I guess. When we come to it, we can move the
code from shmem_file_splice_read() here.
next prev parent reply other threads:[~2026-07-24 16:29 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-23 14:30 [PATCH v4 00/14] Use generic_file_read_iter() in hugetlbfs Matthew Wilcox (Oracle)
2026-07-23 14:30 ` [PATCH v4 01/14] memory-failure: Fix hardware poison check in unpoison_memory() again Matthew Wilcox (Oracle)
2026-07-24 12:32 ` Matthew Wilcox
2026-07-23 14:30 ` [PATCH v4 02/14] memory-failure: Test the page is hwpoison before taking the mutex Matthew Wilcox (Oracle)
2026-07-24 12:34 ` Matthew Wilcox
2026-07-23 14:30 ` [PATCH v4 03/14] mm: Rename folio_contain_hwpoison_page() to folio_has_hwpoison_page() Matthew Wilcox (Oracle)
2026-07-24 12:36 ` Matthew Wilcox
2026-07-24 12:52 ` Michael S. Tsirkin
2026-07-24 13:24 ` Matthew Wilcox
2026-07-23 14:30 ` [PATCH v4 04/14] hugetlb: Mark some function arguments as const Matthew Wilcox (Oracle)
2026-07-24 12:38 ` Matthew Wilcox
2026-07-23 14:30 ` [PATCH v4 05/14] guest_memfd: Use folio_has_hwpoisoned_page() Matthew Wilcox (Oracle)
2026-07-24 12:44 ` Matthew Wilcox
2026-07-24 15:16 ` Sean Christopherson
2026-07-24 16:51 ` Ackerley Tng
2026-07-24 18:04 ` Matthew Wilcox
2026-07-24 15:16 ` Sean Christopherson
2026-07-24 16:40 ` Ackerley Tng
2026-07-23 14:30 ` [PATCH v4 06/14] memory-failure: Remove raw_hwp_list_head() Matthew Wilcox (Oracle)
2026-07-24 12:45 ` Matthew Wilcox
2026-07-23 14:30 ` [PATCH v4 07/14] hugetlb: Use the has_hwpoisoned flag Matthew Wilcox (Oracle)
2026-07-24 13:21 ` Matthew Wilcox
2026-07-23 14:30 ` [PATCH v4 08/14] mm: Remove locking mf_mutex in is_raw_hwpoison_page_in_hugepage() Matthew Wilcox (Oracle)
2026-07-24 13:41 ` Matthew Wilcox
2026-07-23 14:30 ` [PATCH v4 09/14] mm: Check individual hugetlb pages for poison Matthew Wilcox (Oracle)
2026-07-24 14:00 ` Matthew Wilcox
2026-07-23 14:30 ` [PATCH v4 10/14] filemap: Add hwpoison handling to filemap_read() Matthew Wilcox (Oracle)
2026-07-24 16:06 ` Matthew Wilcox
2026-07-23 14:30 ` [PATCH v4 11/14] filemap: Remove checks in mapping_set_folio_order_range() Matthew Wilcox (Oracle)
2026-07-24 16:08 ` Matthew Wilcox
2026-07-23 14:30 ` [PATCH v4 12/14] hugetlb: Set mapping folio order Matthew Wilcox (Oracle)
2026-07-24 16:16 ` Matthew Wilcox
2026-07-23 14:30 ` [PATCH v4 13/14] filemap: Add support for authoritative mappings Matthew Wilcox (Oracle)
2026-07-24 16:15 ` Matthew Wilcox
2026-07-24 16:29 ` Matthew Wilcox [this message]
2026-07-23 14:30 ` [PATCH v4 14/14] hugetlb: replace hugetlbfs_read_iter() with generic_file_read_iter() Matthew Wilcox (Oracle)
2026-07-24 16:36 ` Matthew Wilcox
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=amOS9nXAJDIM5KCA@casper.infradead.org \
--to=willy@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=christian@brauner.io \
--cc=david@kernel.org \
--cc=jack@suse.cz \
--cc=jane.chu@oracle.com \
--cc=jiaqiyan@google.com \
--cc=linmiaohe@huawei.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=muchun.song@linux.dev \
--cc=nao.horiguchi@gmail.com \
--cc=osalvador@suse.de \
/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.