linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Pankaj Raghav (Samsung)" <kernel@pankajraghav.com>
To: david@fromorbit.com, willy@infradead.org,
	chandan.babu@oracle.com, djwong@kernel.org, brauner@kernel.org,
	akpm@linux-foundation.org
Cc: linux-kernel@vger.kernel.org, yang@os.amperecomputing.com,
	linux-mm@kvack.org, john.g.garry@oracle.com,
	linux-fsdevel@vger.kernel.org, hare@suse.de,
	p.raghav@samsung.com, mcgrof@kernel.org, gost.dev@samsung.com,
	cl@os.amperecomputing.com, linux-xfs@vger.kernel.org,
	kernel@pankajraghav.com, hch@lst.de, Zi Yan <zi.yan@sent.com>
Subject: [PATCH v8 05/10] filemap: cap PTE range to be created to allowed zero fill in folio_map_range()
Date: Tue, 25 Jun 2024 11:44:15 +0000	[thread overview]
Message-ID: <20240625114420.719014-6-kernel@pankajraghav.com> (raw)
In-Reply-To: <20240625114420.719014-1-kernel@pankajraghav.com>

From: Pankaj Raghav <p.raghav@samsung.com>

Usually the page cache does not extend beyond the size of the inode,
therefore, no PTEs are created for folios that extend beyond the size.

But with LBS support, we might extend page cache beyond the size of the
inode as we need to guarantee folios of minimum order. While doing a
read, do_fault_around() can create PTEs for pages that lie beyond the
EOF leading to incorrect error return when accessing a page beyond the
mapped file.

Cap the PTE range to be created for the page cache up to the end of
file(EOF) in filemap_map_pages() so that return error codes are consistent
with POSIX[1] for LBS configurations.

generic/749(currently in xfstest-dev patches-in-queue branch [0]) has
been created to trigger this edge case. This also fixes generic/749 for
tmpfs with huge=always on systems with 4k base page size.

[0] https://lore.kernel.org/all/20240615002935.1033031-3-mcgrof@kernel.org/
[1](from mmap(2))  SIGBUS
    Attempted access to a page of the buffer that lies beyond the end
    of the mapped file.  For an explanation of the treatment  of  the
    bytes  in  the  page that corresponds to the end of a mapped file
    that is not a multiple of the page size, see NOTES.

Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 mm/filemap.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/mm/filemap.c b/mm/filemap.c
index 8eafbd4a4d0c..56ff1d936aa8 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -3612,7 +3612,7 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf,
 	struct vm_area_struct *vma = vmf->vma;
 	struct file *file = vma->vm_file;
 	struct address_space *mapping = file->f_mapping;
-	pgoff_t last_pgoff = start_pgoff;
+	pgoff_t file_end, last_pgoff = start_pgoff;
 	unsigned long addr;
 	XA_STATE(xas, &mapping->i_pages, start_pgoff);
 	struct folio *folio;
@@ -3638,6 +3638,10 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf,
 		goto out;
 	}
 
+	file_end = DIV_ROUND_UP(i_size_read(mapping->host), PAGE_SIZE) - 1;
+	if (end_pgoff > file_end)
+		end_pgoff = file_end;
+
 	folio_type = mm_counter_file(folio);
 	do {
 		unsigned long end;
-- 
2.44.1


  parent reply	other threads:[~2024-06-25 11:44 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-25 11:44 [PATCH v8 00/10] enable bs > ps in XFS Pankaj Raghav (Samsung)
2024-06-25 11:44 ` [PATCH v8 01/10] fs: Allow fine-grained control of folio sizes Pankaj Raghav (Samsung)
2024-07-04 12:23   ` Ryan Roberts
2024-07-04 15:20     ` Matthew Wilcox
2024-07-04 15:52       ` Ryan Roberts
2024-07-04 21:28       ` Pankaj Raghav (Samsung)
2024-07-04 22:06       ` Dave Chinner
2024-07-04 23:56         ` Matthew Wilcox
2024-07-05  4:32           ` Dave Chinner
2024-07-05  9:03             ` Ryan Roberts
2024-07-05 12:45               ` Pankaj Raghav (Samsung)
2024-07-05 13:24             ` Pankaj Raghav (Samsung)
2024-07-05 13:31               ` Ryan Roberts
2024-07-05 14:14                 ` Pankaj Raghav (Samsung)
2024-07-08 23:01                 ` Dave Chinner
2024-07-09  8:11                   ` Ryan Roberts
2024-07-09 13:08                   ` Pankaj Raghav (Samsung)
2024-07-05 15:14             ` Matthew Wilcox
2024-07-04 21:34     ` Pankaj Raghav (Samsung)
2024-07-09 16:29   ` Pankaj Raghav (Samsung)
2024-07-09 16:38     ` Matthew Wilcox
2024-07-09 17:33       ` Pankaj Raghav (Samsung)
2024-07-09 16:50     ` Darrick J. Wong
2024-07-09 21:08       ` Pankaj Raghav (Samsung)
2024-07-09 21:59         ` Darrick J. Wong
2024-06-25 11:44 ` [PATCH v8 02/10] filemap: allocate mapping_min_order folios in the page cache Pankaj Raghav (Samsung)
2024-06-25 15:52   ` Matthew Wilcox
2024-06-25 18:06     ` Pankaj Raghav (Samsung)
2024-06-25 11:44 ` [PATCH v8 03/10] readahead: allocate folios with mapping_min_order in readahead Pankaj Raghav (Samsung)
2024-07-02 19:38   ` Darrick J. Wong
2024-07-03 14:10     ` Pankaj Raghav (Samsung)
2024-07-04 14:24   ` Ryan Roberts
2024-07-04 14:29     ` Matthew Wilcox
2024-06-25 11:44 ` [PATCH v8 04/10] mm: split a folio in minimum folio order chunks Pankaj Raghav (Samsung)
2024-06-25 14:45   ` Zi Yan
2024-06-25 17:20     ` Pankaj Raghav (Samsung)
2024-06-25 11:44 ` Pankaj Raghav (Samsung) [this message]
2024-07-01 23:39   ` [PATCH v8 05/10] filemap: cap PTE range to be created to allowed zero fill in folio_map_range() Darrick J. Wong
2024-06-25 11:44 ` [PATCH v8 06/10] iomap: fix iomap_dio_zero() for fs bs > system page size Pankaj Raghav (Samsung)
2024-07-01  2:37   ` Dave Chinner
2024-07-01 11:22     ` Pankaj Raghav (Samsung)
2024-07-01 23:40   ` Darrick J. Wong
2024-07-02  7:42   ` Christoph Hellwig
2024-07-02 10:15     ` Pankaj Raghav (Samsung)
2024-07-02 12:02       ` Christoph Hellwig
2024-07-02 14:01         ` Pankaj Raghav (Samsung)
2024-07-02 15:42           ` Christoph Hellwig
2024-07-02 16:13             ` Pankaj Raghav (Samsung)
2024-07-02 16:51               ` Matthew Wilcox
2024-07-02 17:10                 ` Pankaj Raghav (Samsung)
2024-07-03  5:16                   ` Christoph Hellwig
2024-07-02 16:50         ` Matthew Wilcox
2024-07-02 13:49       ` Luis Chamberlain
2024-06-25 11:44 ` [PATCH v8 07/10] xfs: use kvmalloc for xattr buffers Pankaj Raghav (Samsung)
2024-06-25 18:07   ` Pankaj Raghav (Samsung)
2024-06-25 11:44 ` [PATCH v8 08/10] xfs: expose block size in stat Pankaj Raghav (Samsung)
2024-07-01  2:33   ` Dave Chinner
2024-06-25 11:44 ` [PATCH v8 09/10] xfs: make the calculation generic in xfs_sb_validate_fsb_count() Pankaj Raghav (Samsung)
2024-07-01  2:34   ` Dave Chinner
2024-06-25 11:44 ` [PATCH v8 10/10] xfs: enable block size larger than page size support Pankaj Raghav (Samsung)
2024-07-01  2:34   ` Dave Chinner

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=20240625114420.719014-6-kernel@pankajraghav.com \
    --to=kernel@pankajraghav.com \
    --cc=akpm@linux-foundation.org \
    --cc=brauner@kernel.org \
    --cc=chandan.babu@oracle.com \
    --cc=cl@os.amperecomputing.com \
    --cc=david@fromorbit.com \
    --cc=djwong@kernel.org \
    --cc=gost.dev@samsung.com \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=john.g.garry@oracle.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=p.raghav@samsung.com \
    --cc=willy@infradead.org \
    --cc=yang@os.amperecomputing.com \
    --cc=zi.yan@sent.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;
as well as URLs for NNTP newsgroup(s).