iomap: fix the iomap_readpage_actor return value for inline data
The actor should never return a larger value than the length that was passed in. The current code handles this gracefully, but the opcoming iter model will be more picky. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
parent
1acd9e9c01
commit
740499c784
|
@ -205,7 +205,7 @@ struct iomap_readpage_ctx {
|
||||||
struct readahead_control *rac;
|
struct readahead_control *rac;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int iomap_read_inline_data(struct inode *inode, struct page *page,
|
static loff_t iomap_read_inline_data(struct inode *inode, struct page *page,
|
||||||
const struct iomap *iomap)
|
const struct iomap *iomap)
|
||||||
{
|
{
|
||||||
size_t size = i_size_read(inode) - iomap->offset;
|
size_t size = i_size_read(inode) - iomap->offset;
|
||||||
|
@ -253,7 +253,7 @@ iomap_readpage_actor(struct inode *inode, loff_t pos, loff_t length, void *data,
|
||||||
sector_t sector;
|
sector_t sector;
|
||||||
|
|
||||||
if (iomap->type == IOMAP_INLINE)
|
if (iomap->type == IOMAP_INLINE)
|
||||||
return iomap_read_inline_data(inode, page, iomap);
|
return min(iomap_read_inline_data(inode, page, iomap), length);
|
||||||
|
|
||||||
/* zero post-eof blocks as the page may be mapped */
|
/* zero post-eof blocks as the page may be mapped */
|
||||||
iop = iomap_page_create(inode, page);
|
iop = iomap_page_create(inode, page);
|
||||||
|
|
Loading…
Reference in New Issue