Loading fs/iomap/swapfile.c +16 −22 Original line number Diff line number Diff line Loading @@ -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: Loading Loading @@ -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); } /* Loading @@ -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 Loading @@ -160,16 +159,11 @@ 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) while ((ret = iomap_iter(&iter, ops)) > 0) iter.processed = iomap_swapfile_iter(&iter, &iter.iomap, &isi); if (ret < 0) return ret; pos += ret; len -= ret; } if (isi.iomap.length) { ret = iomap_swapfile_add_extent(&isi); if (ret) Loading Loading
fs/iomap/swapfile.c +16 −22 Original line number Diff line number Diff line Loading @@ -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: Loading Loading @@ -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); } /* Loading @@ -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 Loading @@ -160,16 +159,11 @@ 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) while ((ret = iomap_iter(&iter, ops)) > 0) iter.processed = iomap_swapfile_iter(&iter, &iter.iomap, &isi); if (ret < 0) return ret; pos += ret; len -= ret; } if (isi.iomap.length) { ret = iomap_swapfile_add_extent(&isi); if (ret) Loading