iomap: switch iomap_swapfile_activate to use iomap_iter
authorChristoph Hellwig <hch@lst.de>
Wed, 11 Aug 2021 01:33:12 +0000 (18:33 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 17 Aug 2021 04:26:33 +0000 (21:26 -0700)
Switch iomap_swapfile_activate to use iomap_iter.

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>
fs/iomap/swapfile.c

index 6250ca6..7069606 100644 (file)
@@ -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);