On Mon, Aug 09, 2021 at 08:12:36AM +0200, Christoph Hellwig wrote: > Switch iomap_swapfile_activate to use iomap_iter. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Smooooooth Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > fs/iomap/swapfile.c | 38 ++++++++++++++++---------------------- > 1 file changed, 16 insertions(+), 22 deletions(-) > > diff --git a/fs/iomap/swapfile.c b/fs/iomap/swapfile.c > index 6250ca6a1f851d..7069606eca85b2 100644 > --- a/fs/iomap/swapfile.c > +++ b/fs/iomap/swapfile.c > @@ -88,13 +88,9 @@ static int iomap_swapfile_fail(struct iomap_swapfile_info *isi, const char *str) > * swap only cares about contiguous page-aligned physical extents and makes no > * distinction between written and unwritten extents. > */ > -static loff_t iomap_swapfile_activate_actor(struct inode *inode, loff_t pos, > - loff_t count, void *data, struct iomap *iomap, > - struct iomap *srcmap) > +static loff_t iomap_swapfile_iter(const struct iomap_iter *iter, > + struct iomap *iomap, struct iomap_swapfile_info *isi) > { > - struct iomap_swapfile_info *isi = data; > - int error; > - > switch (iomap->type) { > case IOMAP_MAPPED: > case IOMAP_UNWRITTEN: > @@ -125,12 +121,12 @@ static loff_t iomap_swapfile_activate_actor(struct inode *inode, loff_t pos, > isi->iomap.length += iomap->length; > } else { > /* Otherwise, add the retained iomap and store this one. */ > - error = iomap_swapfile_add_extent(isi); > + int error = iomap_swapfile_add_extent(isi); > if (error) > return error; > memcpy(&isi->iomap, iomap, sizeof(isi->iomap)); > } > - return count; > + return iomap_length(iter); > } > > /* > @@ -141,16 +137,19 @@ int iomap_swapfile_activate(struct swap_info_struct *sis, > struct file *swap_file, sector_t *pagespan, > const struct iomap_ops *ops) > { > + struct inode *inode = swap_file->f_mapping->host; > + struct iomap_iter iter = { > + .inode = inode, > + .pos = 0, > + .len = ALIGN_DOWN(i_size_read(inode), PAGE_SIZE), > + .flags = IOMAP_REPORT, > + }; > struct iomap_swapfile_info isi = { > .sis = sis, > .lowest_ppage = (sector_t)-1ULL, > .file = swap_file, > }; > - struct address_space *mapping = swap_file->f_mapping; > - struct inode *inode = mapping->host; > - loff_t pos = 0; > - loff_t len = ALIGN_DOWN(i_size_read(inode), PAGE_SIZE); > - loff_t ret; > + int ret; > > /* > * Persist all file mapping metadata so that we won't have any > @@ -160,15 +159,10 @@ int iomap_swapfile_activate(struct swap_info_struct *sis, > if (ret) > return ret; > > - while (len > 0) { > - ret = iomap_apply(inode, pos, len, IOMAP_REPORT, > - ops, &isi, iomap_swapfile_activate_actor); > - if (ret <= 0) > - return ret; > - > - pos += ret; > - len -= ret; > - } > + while ((ret = iomap_iter(&iter, ops)) > 0) > + iter.processed = iomap_swapfile_iter(&iter, &iter.iomap, &isi); > + if (ret < 0) > + return ret; > > if (isi.iomap.length) { > ret = iomap_swapfile_add_extent(&isi); > -- > 2.30.2 >