iomap: iomap_read_inline_data cleanup

Change iomap_read_inline_data to return 0 or an error code; this
simplifies the callers.  Add a description.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
[djwong: document the return value of iomap_read_inline_data explicitly]
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
Andreas Gruenbacher 2021-11-24 10:15:47 -08:00 committed by Darrick J. Wong
parent d8af404ffc
commit 5ad448ce29

View File

@ -205,7 +205,16 @@ struct iomap_readpage_ctx {
struct readahead_control *rac;
};
static loff_t iomap_read_inline_data(const struct iomap_iter *iter,
/**
* iomap_read_inline_data - copy inline data into the page cache
* @iter: iteration structure
* @page: page to copy to
*
* Copy the inline data in @iter into @page and zero out the rest of the page.
* Only a single IOMAP_INLINE extent is allowed at the end of each file.
* Returns zero for success to complete the read, or the usual negative errno.
*/
static int iomap_read_inline_data(const struct iomap_iter *iter,
struct page *page)
{
const struct iomap *iomap = iomap_iter_srcmap(iter);
@ -214,7 +223,7 @@ static loff_t iomap_read_inline_data(const struct iomap_iter *iter,
void *addr;
if (PageUptodate(page))
return PAGE_SIZE - poff;
return 0;
if (WARN_ON_ONCE(size > PAGE_SIZE - poff))
return -EIO;
@ -231,7 +240,7 @@ static loff_t iomap_read_inline_data(const struct iomap_iter *iter,
memset(addr + size, 0, PAGE_SIZE - poff - size);
kunmap_local(addr);
iomap_set_range_uptodate(page, poff, PAGE_SIZE - poff);
return PAGE_SIZE - poff;
return 0;
}
static inline bool iomap_block_needs_zeroing(const struct iomap_iter *iter,
@ -256,13 +265,8 @@ static loff_t iomap_readpage_iter(const struct iomap_iter *iter,
unsigned poff, plen;
sector_t sector;
if (iomap->type == IOMAP_INLINE) {
loff_t ret = iomap_read_inline_data(iter, page);
if (ret < 0)
return ret;
return 0;
}
if (iomap->type == IOMAP_INLINE)
return iomap_read_inline_data(iter, page);
/* zero post-eof blocks as the page may be mapped */
iop = iomap_page_create(iter->inode, page);
@ -587,15 +591,10 @@ static int __iomap_write_begin(const struct iomap_iter *iter, loff_t pos,
static int iomap_write_begin_inline(const struct iomap_iter *iter,
struct page *page)
{
int ret;
/* needs more work for the tailpacking case; disable for now */
if (WARN_ON_ONCE(iomap_iter_srcmap(iter)->offset != 0))
return -EIO;
ret = iomap_read_inline_data(iter, page);
if (ret < 0)
return ret;
return 0;
return iomap_read_inline_data(iter, page);
}
static int iomap_write_begin(const struct iomap_iter *iter, loff_t pos,