On Mon, Aug 09, 2021 at 08:12:30AM +0200, Christoph Hellwig wrote: > Switch iomap_page_mkwrite to use iomap_iter. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > fs/iomap/buffered-io.c | 39 +++++++++++++++++---------------------- > 1 file changed, 17 insertions(+), 22 deletions(-) > > diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c > index 3a23f7346938fb..5ab464937d4886 100644 > --- a/fs/iomap/buffered-io.c > +++ b/fs/iomap/buffered-io.c > @@ -961,15 +961,15 @@ iomap_truncate_page(struct inode *inode, loff_t pos, bool *did_zero, > } > EXPORT_SYMBOL_GPL(iomap_truncate_page); > > -static loff_t > -iomap_page_mkwrite_actor(struct inode *inode, loff_t pos, loff_t length, > - void *data, struct iomap *iomap, struct iomap *srcmap) > +static loff_t iomap_page_mkwrite_iter(struct iomap_iter *iter, > + struct page *page) > { > - struct page *page = data; > + loff_t length = iomap_length(iter); > int ret; > > - if (iomap->flags & IOMAP_F_BUFFER_HEAD) { > - ret = __block_write_begin_int(page, pos, length, NULL, iomap); > + if (iter->iomap.flags & IOMAP_F_BUFFER_HEAD) { > + ret = __block_write_begin_int(page, iter->pos, length, NULL, > + &iter->iomap); > if (ret) > return ret; > block_commit_write(page, 0, length); > @@ -983,29 +983,24 @@ iomap_page_mkwrite_actor(struct inode *inode, loff_t pos, loff_t length, > > vm_fault_t iomap_page_mkwrite(struct vm_fault *vmf, const struct iomap_ops *ops) > { > + struct iomap_iter iter = { > + .inode = file_inode(vmf->vma->vm_file), > + .flags = IOMAP_WRITE | IOMAP_FAULT, > + }; > struct page *page = vmf->page; > - struct inode *inode = file_inode(vmf->vma->vm_file); > - unsigned long length; > - loff_t offset; > ssize_t ret; > > lock_page(page); > - ret = page_mkwrite_check_truncate(page, inode); > + ret = page_mkwrite_check_truncate(page, iter.inode); > if (ret < 0) > goto out_unlock; > - length = ret; > - > - offset = page_offset(page); > - while (length > 0) { > - ret = iomap_apply(inode, offset, length, > - IOMAP_WRITE | IOMAP_FAULT, ops, page, > - iomap_page_mkwrite_actor); > - if (unlikely(ret <= 0)) > - goto out_unlock; > - offset += ret; > - length -= ret; > - } > + iter.pos = page_offset(page); > + iter.len = ret; > + while ((ret = iomap_iter(&iter, ops)) > 0) > + iter.processed = iomap_page_mkwrite_iter(&iter, page); > > + if (ret < 0) > + goto out_unlock; > wait_for_stable_page(page); > return VM_FAULT_LOCKED; > out_unlock: > -- > 2.30.2 >