mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
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>
This commit is contained in:
parent
0fb823f1cf
commit
c0adf8c3a9
@ -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)
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user