[RFC] gfs2: Do not call iomap_zero_range beyond eof

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>

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);
 }





[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux