Commit 3d99a1ce authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong
Browse files

iomap: switch iomap_swapfile_activate to use iomap_iter



Switch iomap_swapfile_activate to use iomap_iter.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
parent c4740bf1
Loading
Loading
Loading
Loading
+16 −22
Original line number Diff line number Diff line
@@ -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,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)