aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/bio.h28
-rw-r--r--include/linux/blkdev.h7
2 files changed, 18 insertions, 17 deletions
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 9f182fcbe714..c16adb5f69f8 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -63,10 +63,13 @@
63 */ 63 */
64#define bio_iovec_idx(bio, idx) (&((bio)->bi_io_vec[(idx)])) 64#define bio_iovec_idx(bio, idx) (&((bio)->bi_io_vec[(idx)]))
65#define __bio_iovec(bio) bio_iovec_idx((bio), (bio)->bi_iter.bi_idx) 65#define __bio_iovec(bio) bio_iovec_idx((bio), (bio)->bi_iter.bi_idx)
66#define bio_iovec(bio) (*__bio_iovec(bio)) 66
67#define bio_iter_iovec(bio, iter) ((bio)->bi_io_vec[(iter).bi_idx])
67 68
68#define bio_page(bio) (bio_iovec((bio)).bv_page) 69#define bio_page(bio) (bio_iovec((bio)).bv_page)
69#define bio_offset(bio) (bio_iovec((bio)).bv_offset) 70#define bio_offset(bio) (bio_iovec((bio)).bv_offset)
71#define bio_iovec(bio) (*__bio_iovec(bio))
72
70#define bio_segments(bio) ((bio)->bi_vcnt - (bio)->bi_iter.bi_idx) 73#define bio_segments(bio) ((bio)->bi_vcnt - (bio)->bi_iter.bi_idx)
71#define bio_sectors(bio) ((bio)->bi_iter.bi_size >> 9) 74#define bio_sectors(bio) ((bio)->bi_iter.bi_size >> 9)
72#define bio_end_sector(bio) ((bio)->bi_iter.bi_sector + bio_sectors((bio))) 75#define bio_end_sector(bio) ((bio)->bi_iter.bi_sector + bio_sectors((bio)))
@@ -134,15 +137,6 @@ static inline void *bio_data(struct bio *bio)
134#define bio_io_error(bio) bio_endio((bio), -EIO) 137#define bio_io_error(bio) bio_endio((bio), -EIO)
135 138
136/* 139/*
137 * drivers should not use the __ version unless they _really_ know what
138 * they're doing
139 */
140#define __bio_for_each_segment(bvl, bio, i, start_idx) \
141 for (bvl = bio_iovec_idx((bio), (start_idx)), i = (start_idx); \
142 i < (bio)->bi_vcnt; \
143 bvl++, i++)
144
145/*
146 * drivers should _never_ use the all version - the bio may have been split 140 * drivers should _never_ use the all version - the bio may have been split
147 * before it got to the driver and the driver won't own all of it 141 * before it got to the driver and the driver won't own all of it
148 */ 142 */
@@ -151,10 +145,16 @@ static inline void *bio_data(struct bio *bio)
151 bvl = bio_iovec_idx((bio), (i)), i < (bio)->bi_vcnt; \ 145 bvl = bio_iovec_idx((bio), (i)), i < (bio)->bi_vcnt; \
152 i++) 146 i++)
153 147
154#define bio_for_each_segment(bvl, bio, i) \ 148#define __bio_for_each_segment(bvl, bio, iter, start) \
155 for (i = (bio)->bi_iter.bi_idx; \ 149 for (iter = (start); \
156 bvl = bio_iovec_idx((bio), (i)), i < (bio)->bi_vcnt; \ 150 bvl = bio_iter_iovec((bio), (iter)), \
157 i++) 151 (iter).bi_idx < (bio)->bi_vcnt; \
152 (iter).bi_idx++)
153
154#define bio_for_each_segment(bvl, bio, iter) \
155 __bio_for_each_segment(bvl, bio, iter, (bio)->bi_iter)
156
157#define bio_iter_last(bio, iter) ((iter).bi_idx == (bio)->bi_vcnt - 1)
158 158
159/* 159/*
160 * get a reference to a bio, so it won't disappear. the intended use is 160 * get a reference to a bio, so it won't disappear. the intended use is
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 1b135d49b279..337b92a54658 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -735,7 +735,7 @@ struct rq_map_data {
735}; 735};
736 736
737struct req_iterator { 737struct req_iterator {
738 int i; 738 struct bvec_iter iter;
739 struct bio *bio; 739 struct bio *bio;
740}; 740};
741 741
@@ -748,10 +748,11 @@ struct req_iterator {
748 748
749#define rq_for_each_segment(bvl, _rq, _iter) \ 749#define rq_for_each_segment(bvl, _rq, _iter) \
750 __rq_for_each_bio(_iter.bio, _rq) \ 750 __rq_for_each_bio(_iter.bio, _rq) \
751 bio_for_each_segment(bvl, _iter.bio, _iter.i) 751 bio_for_each_segment(bvl, _iter.bio, _iter.iter)
752 752
753#define rq_iter_last(rq, _iter) \ 753#define rq_iter_last(rq, _iter) \
754 (_iter.bio->bi_next == NULL && _iter.i == _iter.bio->bi_vcnt-1) 754 (_iter.bio->bi_next == NULL && \
755 bio_iter_last(_iter.bio, _iter.iter))
755 756
756#ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 757#ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
757# error "You should define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE for your platform" 758# error "You should define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE for your platform"