On Thu, Nov 15, 2018 at 04:52:49PM +0800, Ming Lei wrote: > This helper is used for iterating over multi-page bvec for bio > split & merge code. > > Cc: Dave Chinner <dchinner@xxxxxxxxxx> > Cc: Kent Overstreet <kent.overstreet@xxxxxxxxx> > Cc: Mike Snitzer <snitzer@xxxxxxxxxx> > Cc: dm-devel@xxxxxxxxxx > Cc: Alexander Viro <viro@xxxxxxxxxxxxxxxxxx> > Cc: linux-fsdevel@xxxxxxxxxxxxxxx > Cc: Shaohua Li <shli@xxxxxxxxxx> > Cc: linux-raid@xxxxxxxxxxxxxxx > Cc: linux-erofs@xxxxxxxxxxxxxxxx > Cc: David Sterba <dsterba@xxxxxxxx> > Cc: linux-btrfs@xxxxxxxxxxxxxxx > Cc: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > Cc: linux-xfs@xxxxxxxxxxxxxxx > Cc: Gao Xiang <gaoxiang25@xxxxxxxxxx> > Cc: Christoph Hellwig <hch@xxxxxx> > Cc: Theodore Ts'o <tytso@xxxxxxx> > Cc: linux-ext4@xxxxxxxxxxxxxxx > Cc: Coly Li <colyli@xxxxxxx> > Cc: linux-bcache@xxxxxxxxxxxxxxx > Cc: Boaz Harrosh <ooo@xxxxxxxxxxxxxxx> > Cc: Bob Peterson <rpeterso@xxxxxxxxxx> > Cc: cluster-devel@xxxxxxxxxx Reviewed-by: Omar Sandoval <osandov@xxxxxx> One comment below. > Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> > --- > include/linux/bio.h | 34 +++++++++++++++++++++++++++++++--- > include/linux/bvec.h | 36 ++++++++++++++++++++++++++++++++---- > 2 files changed, 63 insertions(+), 7 deletions(-) > > diff --git a/include/linux/bio.h b/include/linux/bio.h > index 056fb627edb3..1f0dcf109841 100644 > --- a/include/linux/bio.h > +++ b/include/linux/bio.h > @@ -76,6 +76,9 @@ > #define bio_data_dir(bio) \ > (op_is_write(bio_op(bio)) ? WRITE : READ) > > +#define bio_iter_mp_iovec(bio, iter) \ > + mp_bvec_iter_bvec((bio)->bi_io_vec, (iter)) > + > /* > * Check whether this bio carries any data or not. A NULL bio is allowed. > */ > @@ -135,18 +138,33 @@ static inline bool bio_full(struct bio *bio) > #define bio_for_each_segment_all(bvl, bio, i) \ > for (i = 0, bvl = (bio)->bi_io_vec; i < (bio)->bi_vcnt; i++, bvl++) > > -static inline void bio_advance_iter(struct bio *bio, struct bvec_iter *iter, > - unsigned bytes) > +static inline void __bio_advance_iter(struct bio *bio, struct bvec_iter *iter, > + unsigned bytes, bool mp) > { > iter->bi_sector += bytes >> 9; > > if (bio_no_advance_iter(bio)) > iter->bi_size -= bytes; > else > - bvec_iter_advance(bio->bi_io_vec, iter, bytes); > + if (!mp) > + bvec_iter_advance(bio->bi_io_vec, iter, bytes); > + else > + mp_bvec_iter_advance(bio->bi_io_vec, iter, bytes); if (!foo) {} else {} hurts my brain, please do if (mp) mp_bvec_iter_advance(bio->bi_io_vec, iter, bytes); else bvec_iter_advance(bio->bi_io_vec, iter, bytes);