@@ -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)