aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorBrian Foster <bfoster@redhat.com>2025-02-07 09:32:46 -0500
committerChristian Brauner <brauner@kernel.org>2025-02-10 12:46:33 +0100
commitf4799838662340b3e53da8ff6bcabac743d80f17 (patch)
tree73c4aaa7cdf603146c6f1b044c3f9c12a766c4ea
parentiomap: split out iomap check and reset logic from iter advance (diff)
downloadwireguard-linux-f4799838662340b3e53da8ff6bcabac743d80f17.tar.xz
wireguard-linux-f4799838662340b3e53da8ff6bcabac743d80f17.zip
iomap: refactor iomap_iter() length check and tracepoint
iomap_iter() checks iomap.length to skip individual code blocks not appropriate for the initial case where there is no mapping in the iter. To prepare for upcoming changes, refactor the code to jump straight to the ->iomap_begin() handler in the initial case and move the tracepoint to the top of the function so it always executes. Signed-off-by: Brian Foster <bfoster@redhat.com> Link: https://lore.kernel.org/r/20250207143253.314068-4-bfoster@redhat.com Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: "Darrick J. Wong" <djwong@kernel.org> Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to '')
-rw-r--r--fs/iomap/iter.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/fs/iomap/iter.c b/fs/iomap/iter.c
index 731ea7267f27..a2ae99fe6431 100644
--- a/fs/iomap/iter.c
+++ b/fs/iomap/iter.c
@@ -73,7 +73,12 @@ int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops)
{
int ret;
- if (iter->iomap.length && ops->iomap_end) {
+ trace_iomap_iter(iter, ops, _RET_IP_);
+
+ if (!iter->iomap.length)
+ goto begin;
+
+ if (ops->iomap_end) {
ret = ops->iomap_end(iter->inode, iter->pos, iomap_length(iter),
iter->processed > 0 ? iter->processed : 0,
iter->flags, &iter->iomap);
@@ -82,14 +87,12 @@ int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops)
}
/* advance and clear state from the previous iteration */
- trace_iomap_iter(iter, ops, _RET_IP_);
- if (iter->iomap.length) {
- ret = iomap_iter_advance(iter, iter->processed);
- iomap_iter_reset_iomap(iter);
- if (ret <= 0)
- return ret;
- }
+ ret = iomap_iter_advance(iter, iter->processed);
+ iomap_iter_reset_iomap(iter);
+ if (ret <= 0)
+ return ret;
+begin:
ret = ops->iomap_begin(iter->inode, iter->pos, iter->len, iter->flags,
&iter->iomap, &iter->srcmap);
if (ret < 0)