[PATCH V4 26/45] block: introduce bio_segments()

Ming Lei
2017-12-18T12:29:43Z

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@redhat.com>
---
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 2dd1ca0285e1..205a914ee3c0 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -223,9 +223,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)
{
- unsigned segs = 0;
+ unsigned elems = 0;
struct bio_vec bv;
struct bvec_iter iter;

@@ -245,10 +245,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