All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC] gfs2: Do not call iomap_zero_range beyond eof
@ 2025-05-08 13:34 Andreas Gruenbacher
  2025-05-08 14:17 ` Christoph Hellwig
  2025-05-08 14:30 ` Brian Foster
  0 siblings, 2 replies; 8+ messages in thread
From: Andreas Gruenbacher @ 2025-05-08 13:34 UTC (permalink / raw)
  To: Brian Foster, Christian Brauner, Christoph Hellwig,
	Matthew Wilcox, linux-xfs, linux-fsdevel, gfs2
  Cc: Andreas Gruenbacher

Since commit eb65540aa9fc ("iomap: warn on zero range of a post-eof
folio"), iomap_zero_range() warns when asked to zero a folio beyond eof.
The warning triggers on the following code path:

  gfs2_fallocate(FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE)
    __gfs2_punch_hole()
      gfs2_block_zero_range()
        iomap_zero_range()

So far, gfs2 is just zeroing out partial pages at the beginning and end
of the range, whether beyond eof or not.  The data beyond eof is already
expected to be all zeroes, though.  Truncate the range passed to
iomap_zero_range().

As an alternative approach, we could also implicitly truncate the range
inside iomap_zero_range() instead of issuing a warning.  Any thoughts?

Thanks,
Andreas

--

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>

diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index b81984def58e..d9a4309cd414 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -1301,6 +1301,10 @@ static int gfs2_block_zero_range(struct inode *inode, loff_t from,
 				 unsigned int length)
 {
 	BUG_ON(current->journal_info);
+	if (from > inode->i_size)
+		return 0;
+	if (from + length > inode->i_size)
+		length = inode->i_size - from;
 	return iomap_zero_range(inode, from, length, NULL, &gfs2_iomap_ops,
 			NULL);
 }


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-05-08 16:36 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-08 13:34 [RFC] gfs2: Do not call iomap_zero_range beyond eof Andreas Gruenbacher
2025-05-08 14:17 ` Christoph Hellwig
2025-05-08 14:30 ` Brian Foster
2025-05-08 15:04   ` Darrick J. Wong
2025-05-08 15:19     ` Brian Foster
2025-05-08 16:04       ` Darrick J. Wong
2025-05-08 16:34         ` Brian Foster
2025-05-08 16:36         ` Andreas Gruenbacher

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.