Commit 1072c12d authored by Omar Sandoval's avatar Omar Sandoval Committed by David Sterba

block: add bio_for_each_bvec_all()

An upcoming Btrfs fix needs to know the original size of a non-cloned
bios. Rather than accessing the bvec table directly, let's add a
bio_for_each_bvec_all() accessor.
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: default avatarOmar Sandoval <osandov@fb.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 534cf531
...@@ -80,6 +80,7 @@ ForEachMacros: ...@@ -80,6 +80,7 @@ ForEachMacros:
- 'ax25_uid_for_each' - 'ax25_uid_for_each'
- '__bio_for_each_bvec' - '__bio_for_each_bvec'
- 'bio_for_each_bvec' - 'bio_for_each_bvec'
- 'bio_for_each_bvec_all'
- 'bio_for_each_integrity_vec' - 'bio_for_each_integrity_vec'
- '__bio_for_each_segment' - '__bio_for_each_segment'
- 'bio_for_each_segment' - 'bio_for_each_segment'
......
...@@ -129,6 +129,7 @@ Usage of helpers: ...@@ -129,6 +129,7 @@ Usage of helpers:
:: ::
bio_for_each_segment_all() bio_for_each_segment_all()
bio_for_each_bvec_all()
bio_first_bvec_all() bio_first_bvec_all()
bio_first_page_all() bio_first_page_all()
bio_last_bvec_all() bio_last_bvec_all()
...@@ -143,4 +144,5 @@ Usage of helpers: ...@@ -143,4 +144,5 @@ Usage of helpers:
bio_vec' will contain a multi-page IO vector during the iteration:: bio_vec' will contain a multi-page IO vector during the iteration::
bio_for_each_bvec() bio_for_each_bvec()
bio_for_each_bvec_all()
rq_for_each_bvec() rq_for_each_bvec()
...@@ -169,6 +169,14 @@ static inline void bio_advance_iter(struct bio *bio, struct bvec_iter *iter, ...@@ -169,6 +169,14 @@ static inline void bio_advance_iter(struct bio *bio, struct bvec_iter *iter,
#define bio_for_each_bvec(bvl, bio, iter) \ #define bio_for_each_bvec(bvl, bio, iter) \
__bio_for_each_bvec(bvl, bio, iter, (bio)->bi_iter) __bio_for_each_bvec(bvl, bio, iter, (bio)->bi_iter)
/*
* Iterate over all multi-page bvecs. Drivers shouldn't use this version for the
* same reasons as bio_for_each_segment_all().
*/
#define bio_for_each_bvec_all(bvl, bio, i) \
for (i = 0, bvl = bio_first_bvec_all(bio); \
i < (bio)->bi_vcnt; i++, bvl++) \
#define bio_iter_last(bvec, iter) ((iter).bi_size == (bvec).bv_len) #define bio_iter_last(bvec, iter) ((iter).bi_size == (bvec).bv_len)
static inline unsigned bio_segments(struct bio *bio) static inline unsigned bio_segments(struct bio *bio)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment