iomap: Add __iomap_put_folio helper
Add an __iomap_put_folio() helper to encapsulate unlocking the folio, calling ->page_done(), and putting the folio. Use the new helper in iomap_write_begin() and iomap_write_end(). This effectively doesn't change the way the code works, but prepares for successive improvements. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
parent
5dc4c995db
commit
7a70a5085e
|
@ -575,6 +575,19 @@ static int __iomap_write_begin(const struct iomap_iter *iter, loff_t pos,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void __iomap_put_folio(struct iomap_iter *iter, loff_t pos, size_t ret,
|
||||
struct folio *folio)
|
||||
{
|
||||
const struct iomap_page_ops *page_ops = iter->iomap.page_ops;
|
||||
|
||||
if (folio)
|
||||
folio_unlock(folio);
|
||||
if (page_ops && page_ops->page_done)
|
||||
page_ops->page_done(iter->inode, pos, ret, &folio->page);
|
||||
if (folio)
|
||||
folio_put(folio);
|
||||
}
|
||||
|
||||
static int iomap_write_begin_inline(const struct iomap_iter *iter,
|
||||
struct folio *folio)
|
||||
{
|
||||
|
@ -616,7 +629,8 @@ static int iomap_write_begin(struct iomap_iter *iter, loff_t pos,
|
|||
fgp, mapping_gfp_mask(iter->inode->i_mapping));
|
||||
if (!folio) {
|
||||
status = (iter->flags & IOMAP_NOWAIT) ? -EAGAIN : -ENOMEM;
|
||||
goto out_no_page;
|
||||
__iomap_put_folio(iter, pos, 0, NULL);
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -656,13 +670,9 @@ static int iomap_write_begin(struct iomap_iter *iter, loff_t pos,
|
|||
return 0;
|
||||
|
||||
out_unlock:
|
||||
folio_unlock(folio);
|
||||
folio_put(folio);
|
||||
__iomap_put_folio(iter, pos, 0, folio);
|
||||
iomap_write_failed(iter->inode, pos, len);
|
||||
|
||||
out_no_page:
|
||||
if (page_ops && page_ops->page_done)
|
||||
page_ops->page_done(iter->inode, pos, 0, NULL);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -712,7 +722,6 @@ static size_t iomap_write_end_inline(const struct iomap_iter *iter,
|
|||
static size_t iomap_write_end(struct iomap_iter *iter, loff_t pos, size_t len,
|
||||
size_t copied, struct folio *folio)
|
||||
{
|
||||
const struct iomap_page_ops *page_ops = iter->iomap.page_ops;
|
||||
const struct iomap *srcmap = iomap_iter_srcmap(iter);
|
||||
loff_t old_size = iter->inode->i_size;
|
||||
size_t ret;
|
||||
|
@ -735,14 +744,10 @@ static size_t iomap_write_end(struct iomap_iter *iter, loff_t pos, size_t len,
|
|||
i_size_write(iter->inode, pos + ret);
|
||||
iter->iomap.flags |= IOMAP_F_SIZE_CHANGED;
|
||||
}
|
||||
folio_unlock(folio);
|
||||
__iomap_put_folio(iter, pos, ret, folio);
|
||||
|
||||
if (old_size < pos)
|
||||
pagecache_isize_extended(iter->inode, old_size, pos);
|
||||
if (page_ops && page_ops->page_done)
|
||||
page_ops->page_done(iter->inode, pos, ret, &folio->page);
|
||||
folio_put(folio);
|
||||
|
||||
if (ret < len)
|
||||
iomap_write_failed(iter->inode, pos + ret, len - ret);
|
||||
return ret;
|
||||
|
|
Loading…
Reference in New Issue