Lines Matching defs:iter

16  * remap the unprocessed range of the iter, and that means we may need to remap
17 * even when we've made no progress (i.e. iter->processed = 0). Hence the
22 static inline int iomap_iter_advance(struct iomap_iter *iter)
24 bool stale = iter->iomap.flags & IOMAP_F_STALE;
27 if (iter->iomap.length) {
28 if (iter->processed < 0)
29 return iter->processed;
30 if (!iter->processed && !stale)
32 if (WARN_ON_ONCE(iter->processed > iomap_length(iter)))
34 iter->pos += iter->processed;
35 iter->len -= iter->processed;
36 if (!iter->len)
41 iter->processed = 0;
42 memset(&iter->iomap, 0, sizeof(iter->iomap));
43 memset(&iter->srcmap, 0, sizeof(iter->srcmap));
47 static inline void iomap_iter_done(struct iomap_iter *iter)
49 WARN_ON_ONCE(iter->iomap.offset > iter->pos);
50 WARN_ON_ONCE(iter->iomap.length == 0);
51 WARN_ON_ONCE(iter->iomap.offset + iter->iomap.length <= iter->pos);
52 WARN_ON_ONCE(iter->iomap.flags & IOMAP_F_STALE);
54 trace_iomap_iter_dstmap(iter->inode, &iter->iomap);
55 if (iter->srcmap.type != IOMAP_HOLE)
56 trace_iomap_iter_srcmap(iter->inode, &iter->srcmap);
61 * @iter: iteration structue
71 * of the loop body: leave @iter.processed unchanged, or set it to a negative
74 int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops)
78 if (iter->iomap.length && ops->iomap_end) {
79 ret = ops->iomap_end(iter->inode, iter->pos, iomap_length(iter),
80 iter->processed > 0 ? iter->processed : 0,
81 iter->flags, &iter->iomap);
82 if (ret < 0 && !iter->processed)
86 trace_iomap_iter(iter, ops, _RET_IP_);
87 ret = iomap_iter_advance(iter);
91 ret = ops->iomap_begin(iter->inode, iter->pos, iter->len, iter->flags,
92 &iter->iomap, &iter->srcmap);
95 iomap_iter_done(iter);