Unverified Commit ca82a7ea authored by Joanne Koong's avatar Joanne Koong Committed by Christian Brauner
Browse files

iomap: simplify iomap_iter_advance()



Most callers of iomap_iter_advance() do not need the remaining length
returned. Get rid of the extra iomap_length() call that
iomap_iter_advance() does.

Signed-off-by: default avatarJoanne Koong <joannelkoong@gmail.com>
Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 3a866087
Loading
Loading
Loading
Loading
+12 −18
Original line number Diff line number Diff line
@@ -1507,7 +1507,7 @@ static int dax_zero_iter(struct iomap_iter *iter, bool *did_zero)

	/* already zeroed?  we're done. */
	if (srcmap->type == IOMAP_HOLE || srcmap->type == IOMAP_UNWRITTEN)
		return iomap_iter_advance(iter, &length);
		return iomap_iter_advance(iter, length);

	/*
	 * invalidate the pages whose sharing state is to be changed
@@ -1536,10 +1536,10 @@ static int dax_zero_iter(struct iomap_iter *iter, bool *did_zero)
		if (ret < 0)
			return ret;

		ret = iomap_iter_advance(iter, &length);
		ret = iomap_iter_advance(iter, length);
		if (ret)
			return ret;
	} while (length > 0);
	} while ((length = iomap_length(iter)) > 0);

	if (did_zero)
		*did_zero = true;
@@ -1597,7 +1597,7 @@ static int dax_iomap_iter(struct iomap_iter *iomi, struct iov_iter *iter)

		if (iomap->type == IOMAP_HOLE || iomap->type == IOMAP_UNWRITTEN) {
			done = iov_iter_zero(min(length, end - pos), iter);
			return iomap_iter_advance(iomi, &done);
			return iomap_iter_advance(iomi, done);
		}
	}

@@ -1681,12 +1681,12 @@ static int dax_iomap_iter(struct iomap_iter *iomi, struct iov_iter *iter)
			xfer = dax_copy_to_iter(dax_dev, pgoff, kaddr,
					map_len, iter);

		length = xfer;
		ret = iomap_iter_advance(iomi, &length);
		ret = iomap_iter_advance(iomi, xfer);
		if (!ret && xfer == 0)
			ret = -EFAULT;
		if (xfer < map_len)
			break;
		length = iomap_length(iomi);
	}
	dax_read_unlock(id);

@@ -1919,10 +1919,8 @@ static vm_fault_t dax_iomap_pte_fault(struct vm_fault *vmf, unsigned long *pfnp,
			ret |= VM_FAULT_MAJOR;
		}

		if (!(ret & VM_FAULT_ERROR)) {
			u64 length = PAGE_SIZE;
			iter.status = iomap_iter_advance(&iter, &length);
		}
		if (!(ret & VM_FAULT_ERROR))
			iter.status = iomap_iter_advance(&iter, PAGE_SIZE);
	}

	if (iomap_errp)
@@ -2034,10 +2032,8 @@ static vm_fault_t dax_iomap_pmd_fault(struct vm_fault *vmf, unsigned long *pfnp,
			continue; /* actually breaks out of the loop */

		ret = dax_fault_iter(vmf, &iter, pfnp, &xas, &entry, true);
		if (ret != VM_FAULT_FALLBACK) {
			u64 length = PMD_SIZE;
			iter.status = iomap_iter_advance(&iter, &length);
		}
		if (ret != VM_FAULT_FALLBACK)
			iter.status = iomap_iter_advance(&iter, PMD_SIZE);
	}

unlock_entry:
@@ -2163,7 +2159,6 @@ static int dax_range_compare_iter(struct iomap_iter *it_src,
	const struct iomap *smap = &it_src->iomap;
	const struct iomap *dmap = &it_dest->iomap;
	loff_t pos1 = it_src->pos, pos2 = it_dest->pos;
	u64 dest_len;
	void *saddr, *daddr;
	int id, ret;

@@ -2196,10 +2191,9 @@ static int dax_range_compare_iter(struct iomap_iter *it_src,
	dax_read_unlock(id);

advance:
	dest_len = len;
	ret = iomap_iter_advance(it_src, &len);
	ret = iomap_iter_advance(it_src, len);
	if (!ret)
		ret = iomap_iter_advance(it_dest, &dest_len);
		ret = iomap_iter_advance(it_dest, len);
	return ret;

out_unlock:
+9 −9
Original line number Diff line number Diff line
@@ -376,7 +376,7 @@ static int iomap_readpage_iter(struct iomap_iter *iter,
		ret = iomap_read_inline_data(iter, folio);
		if (ret)
			return ret;
		return iomap_iter_advance(iter, &length);
		return iomap_iter_advance(iter, length);
	}

	/* zero post-eof blocks as the page may be mapped */
@@ -437,7 +437,7 @@ static int iomap_readpage_iter(struct iomap_iter *iter,
	 * iteration.
	 */
	length = pos - iter->pos + plen;
	return iomap_iter_advance(iter, &length);
	return iomap_iter_advance(iter, length);
}

static int iomap_read_folio_iter(struct iomap_iter *iter,
@@ -1041,7 +1041,7 @@ static int iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i,
			}
		} else {
			total_written += written;
			iomap_iter_advance(iter, &written);
			iomap_iter_advance(iter, written);
		}
	} while (iov_iter_count(i) && iomap_length(iter));

@@ -1310,7 +1310,7 @@ static int iomap_unshare_iter(struct iomap_iter *iter,
	int status;

	if (!iomap_want_unshare_iter(iter))
		return iomap_iter_advance(iter, &bytes);
		return iomap_iter_advance(iter, bytes);

	do {
		struct folio *folio;
@@ -1334,10 +1334,10 @@ static int iomap_unshare_iter(struct iomap_iter *iter,

		balance_dirty_pages_ratelimited(iter->inode->i_mapping);

		status = iomap_iter_advance(iter, &bytes);
		status = iomap_iter_advance(iter, bytes);
		if (status)
			break;
	} while (bytes > 0);
	} while ((bytes = iomap_length(iter)) > 0);

	return status;
}
@@ -1412,10 +1412,10 @@ static int iomap_zero_iter(struct iomap_iter *iter, bool *did_zero,
		if (WARN_ON_ONCE(!ret))
			return -EIO;

		status = iomap_iter_advance(iter, &bytes);
		status = iomap_iter_advance(iter, bytes);
		if (status)
			break;
	} while (bytes > 0);
	} while ((bytes = iomap_length(iter)) > 0);

	if (did_zero)
		*did_zero = true;
@@ -1526,7 +1526,7 @@ static int iomap_folio_mkwrite_iter(struct iomap_iter *iter,
		folio_mark_dirty(folio);
	}

	return iomap_iter_advance(iter, &length);
	return iomap_iter_advance(iter, length);
}

vm_fault_t iomap_page_mkwrite(struct vm_fault *vmf, const struct iomap_ops *ops,
+3 −3
Original line number Diff line number Diff line
@@ -496,7 +496,7 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio)
	/* Undo iter limitation to current extent */
	iov_iter_reexpand(dio->submit.iter, orig_count - copied);
	if (copied)
		return iomap_iter_advance(iter, &copied);
		return iomap_iter_advance(iter, copied);
	return ret;
}

@@ -507,7 +507,7 @@ static int iomap_dio_hole_iter(struct iomap_iter *iter, struct iomap_dio *dio)
	dio->size += length;
	if (!length)
		return -EFAULT;
	return iomap_iter_advance(iter, &length);
	return iomap_iter_advance(iter, length);
}

static int iomap_dio_inline_iter(struct iomap_iter *iomi, struct iomap_dio *dio)
@@ -542,7 +542,7 @@ static int iomap_dio_inline_iter(struct iomap_iter *iomi, struct iomap_dio *dio)
	dio->size += copied;
	if (!copied)
		return -EFAULT;
	return iomap_iter_advance(iomi, &copied);
	return iomap_iter_advance(iomi, copied);
}

static int iomap_dio_iter(struct iomap_iter *iter, struct iomap_dio *dio)
+5 −9
Original line number Diff line number Diff line
@@ -13,17 +13,13 @@ static inline void iomap_iter_reset_iomap(struct iomap_iter *iter)
	memset(&iter->srcmap, 0, sizeof(iter->srcmap));
}

/*
 * Advance the current iterator position and output the length remaining for the
 * current mapping.
 */
int iomap_iter_advance(struct iomap_iter *iter, u64 *count)
/* Advance the current iterator position and decrement the remaining length */
int iomap_iter_advance(struct iomap_iter *iter, u64 count)
{
	if (WARN_ON_ONCE(*count > iomap_length(iter)))
	if (WARN_ON_ONCE(count > iomap_length(iter)))
		return -EIO;
	iter->pos += *count;
	iter->len -= *count;
	*count = iomap_length(iter);
	iter->pos += count;
	iter->len -= count;
	return 0;
}

+4 −4
Original line number Diff line number Diff line
@@ -16,13 +16,13 @@ static int iomap_seek_hole_iter(struct iomap_iter *iter,
		*hole_pos = mapping_seek_hole_data(iter->inode->i_mapping,
				iter->pos, iter->pos + length, SEEK_HOLE);
		if (*hole_pos == iter->pos + length)
			return iomap_iter_advance(iter, &length);
			return iomap_iter_advance(iter, length);
		return 0;
	case IOMAP_HOLE:
		*hole_pos = iter->pos;
		return 0;
	default:
		return iomap_iter_advance(iter, &length);
		return iomap_iter_advance(iter, length);
	}
}

@@ -59,12 +59,12 @@ static int iomap_seek_data_iter(struct iomap_iter *iter,

	switch (iter->iomap.type) {
	case IOMAP_HOLE:
		return iomap_iter_advance(iter, &length);
		return iomap_iter_advance(iter, length);
	case IOMAP_UNWRITTEN:
		*hole_pos = mapping_seek_hole_data(iter->inode->i_mapping,
				iter->pos, iter->pos + length, SEEK_DATA);
		if (*hole_pos < 0)
			return iomap_iter_advance(iter, &length);
			return iomap_iter_advance(iter, length);
		return 0;
	default:
		*hole_pos = iter->pos;
Loading