summaryrefslogtreecommitdiff
path: root/include/linux/bio.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/bio.h')
-rw-r--r--include/linux/bio.h35
1 files changed, 6 insertions, 29 deletions
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 206e5baa..0ad5a87d 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -113,40 +113,17 @@ static inline void *bio_data(struct bio *bio)
#define __bio_kunmap_atomic(addr) kunmap_atomic(addr)
-static inline struct bio_vec bio_iter_all_peek(const struct bio *bio,
+static inline struct bio_vec *bio_next_segment(const struct bio *bio,
struct bvec_iter_all *iter)
{
- if (WARN_ON(iter->idx >= bio->bi_vcnt))
- return (struct bio_vec) { NULL };
+ if (iter->idx >= bio->bi_vcnt)
+ return NULL;
- return bvec_iter_all_peek(bio->bi_io_vec, iter);
+ return &bio->bi_io_vec[iter->idx];
}
-static inline void bio_iter_all_advance(const struct bio *bio,
- struct bvec_iter_all *iter,
- unsigned bytes)
-{
- bvec_iter_all_advance(bio->bi_io_vec, iter, bytes);
-
- WARN_ON(iter->idx > bio->bi_vcnt ||
- (iter->idx == bio->bi_vcnt && iter->done));
-}
-
-#define bio_for_each_segment_all_continue(bvl, bio, iter) \
- for (; \
- iter.idx < bio->bi_vcnt && \
- ((bvl = bio_iter_all_peek(bio, &iter)), true); \
- bio_iter_all_advance((bio), &iter, bvl.bv_len))
-
-/*
- * drivers should _never_ use the all version - the bio may have been split
- * before it got to the driver and the driver won't own all of it
- */
-#define bio_for_each_segment_all(bvl, bio, iter) \
- for (bvec_iter_all_init(&iter); \
- iter.idx < (bio)->bi_vcnt && \
- ((bvl = bio_iter_all_peek((bio), &iter)), true); \
- bio_iter_all_advance((bio), &iter, bvl.bv_len))
+#define bio_for_each_segment_all(bvl, bio, iter) \
+ for ((iter).idx = 0; (bvl = bio_next_segment((bio), &(iter))); (iter).idx++)
static inline void bio_advance_iter(struct bio *bio, struct bvec_iter *iter,
unsigned bytes)