Allow the caller to specify how much of the page to add to the ioend instead of assuming a single sector. Somebody should probably enhance iomap_writepage_map() to make one call per extent instead of one per block. Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> --- fs/iomap/buffered-io.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index 2b89c43aedd7..eb068e21d3bb 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -1276,12 +1276,12 @@ static bool iomap_can_add_to_ioend(struct iomap *iomap, * first; otherwise finish off the current ioend and start another. */ static struct iomap_ioend *iomap_add_to_ioend(struct inode *inode, - loff_t pos, struct page *page, struct iomap_page *iop, - struct iomap *iomap, struct iomap_ioend *ioend, - struct writeback_control *wbc, struct list_head *iolist) + loff_t pos, size_t len, struct page *page, + struct iomap_page *iop, struct iomap *iomap, + struct iomap_ioend *ioend, struct writeback_control *wbc, + struct list_head *iolist) { sector_t sector = iomap_sector(iomap, pos); - unsigned len = i_blocksize(inode); unsigned poff = offset_in_page(pos); if (!ioend || !iomap_can_add_to_ioend(iomap, ioend, pos, sector)) { @@ -1350,8 +1350,9 @@ iomap_writepage_map(struct iomap_writepage_ctx *wpc, continue; if (wpc->iomap.type == IOMAP_HOLE) continue; - wpc->ioend = iomap_add_to_ioend(inode, file_offset, page, iop, - &wpc->iomap, wpc->ioend, wbc, &submit_list); + wpc->ioend = iomap_add_to_ioend(inode, file_offset, len, page, + iop, &wpc->iomap, wpc->ioend, wbc, + &submit_list); count++; } -- 2.30.2