On Fri, May 25, 2018 at 11:46:00AM +0800, Ming Lei wrote: > There are still cases in which we need to use bio_segments() for get the > number of segment, so introduce it. > > Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> > --- > include/linux/bio.h | 25 ++++++++++++++++++++----- > 1 file changed, 20 insertions(+), 5 deletions(-) > > diff --git a/include/linux/bio.h b/include/linux/bio.h > index 08af9272687f..b24c00f99c9c 100644 > --- a/include/linux/bio.h > +++ b/include/linux/bio.h > @@ -227,9 +227,9 @@ static inline bool bio_rewind_iter(struct bio *bio, struct bvec_iter *iter, > > #define bio_iter_last(bvec, iter) ((iter).bi_size == (bvec).bv_len) > > -static inline unsigned bio_pages(struct bio *bio) > +static inline unsigned __bio_elements(struct bio *bio, bool seg) This is a rather silly helper function, there isn't any actual code that's shared, everything's behind an if () statement. Just open code it in bio_pages() and bio_segments() > { > - unsigned segs = 0; > + unsigned elems = 0; > struct bio_vec bv; > struct bvec_iter iter; > > @@ -249,10 +249,25 @@ static inline unsigned bio_pages(struct bio *bio) > break; > } > > - bio_for_each_page(bv, bio, iter) > - segs++; > + if (!seg) { > + bio_for_each_page(bv, bio, iter) > + elems++; > + } else { > + bio_for_each_segment(bv, bio, iter) > + elems++; > + } > + > + return elems; > +} > + > +static inline unsigned bio_pages(struct bio *bio) > +{ > + return __bio_elements(bio, false); > +} > > - return segs; > +static inline unsigned bio_segments(struct bio *bio) > +{ > + return __bio_elements(bio, true); > } > > /* > -- > 2.9.5 >