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: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Omar Sandoval <osandov@fb.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
534cf531cc
commit
1072c12d7d
|
@ -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:
|
||||||
::
|
::
|
||||||
|
|
||||||
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:
|
||||||
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,
|
||||||
#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)
|
||||||
|
|
Loading…
Reference in New Issue