Message ID | 20210809061244.1196573-17-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/30] iomap: fix a trivial comment typo in trace.h | expand |
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@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> --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 >
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:
Switch iomap_page_mkwrite to use iomap_iter. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/iomap/buffered-io.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-)