summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2024-10-08 10:59:12 +0200
committerCarlos Maiolino <cem@kernel.org>2024-10-15 11:37:41 +0200
commitc0adf8c3a9bf33f1dd1bf950601380f46a3fcec3 (patch)
tree5373e5d270bf94c5f8a186b0173b71eb802d15dd /include/linux
parent0fb823f1cf3417e06846d1ffe2c97e10a65a847e (diff)
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 'include/linux')
-rw-r--r--include/linux/iomap.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/include/linux/iomap.h b/include/linux/iomap.h
index 4ad12a3c8bae..62253739dedc 100644
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@ -256,6 +256,20 @@ static inline const struct iomap *iomap_iter_srcmap(const struct iomap_iter *i)
return &i->iomap;
}
+/*
+ * Return the file offset for the first unchanged block after a short write.
+ *
+ * If nothing was written, round @pos down to point at the first block in
+ * the range, else round up to include the partially written block.
+ */
+static inline loff_t iomap_last_written_block(struct inode *inode, loff_t pos,
+ ssize_t written)
+{
+ if (unlikely(!written))
+ return round_down(pos, i_blocksize(inode));
+ return round_up(pos + written, i_blocksize(inode));
+}
+
ssize_t iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *from,
const struct iomap_ops *ops, void *private);
int iomap_read_folio(struct folio *folio, const struct iomap_ops *ops);