summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2024-10-08 11:59:12 +0300
committerCarlos Maiolino <cem@kernel.org>2024-10-15 12:37:41 +0300
commitc0adf8c3a9bf33f1dd1bf950601380f46a3fcec3 (patch)
tree5373e5d270bf94c5f8a186b0173b71eb802d15dd /fs
parent0fb823f1cf3417e06846d1ffe2c97e10a65a847e (diff)
downloadlinux-c0adf8c3a9bf33f1dd1bf950601380f46a3fcec3.tar.xz
iomap: factor out a iomap_last_written_block helper
Split out a pice of logic from iomap_file_buffered_write_punch_delalloc that is useful for all iomap_end implementations. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Carlos Maiolino <cem@kernel.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/iomap/buffered-io.c13
1 files changed, 2 insertions, 11 deletions
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
index 78ebd265f425..b944d77a78c6 100644
--- a/fs/iomap/buffered-io.c
+++ b/fs/iomap/buffered-io.c
@@ -1280,7 +1280,6 @@ void iomap_file_buffered_write_punch_delalloc(struct inode *inode,
{
loff_t start_byte;
loff_t end_byte;
- unsigned int blocksize = i_blocksize(inode);
if (iomap->type != IOMAP_DELALLOC)
return;
@@ -1289,16 +1288,8 @@ void iomap_file_buffered_write_punch_delalloc(struct inode *inode,
if (!(iomap->flags & IOMAP_F_NEW))
return;
- /*
- * start_byte refers to the first unused block after a short write. If
- * nothing was written, round offset down to point at the first block in
- * the range.
- */
- if (unlikely(!written))
- start_byte = round_down(pos, blocksize);
- else
- start_byte = round_up(pos + written, blocksize);
- end_byte = round_up(pos + length, blocksize);
+ start_byte = iomap_last_written_block(inode, pos, written);
+ end_byte = round_up(pos + length, i_blocksize(inode));
/* Nothing to do if we've written the entire delalloc extent */
if (start_byte >= end_byte)