summaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorChunwei Chen <[email protected]>2014-03-29 20:26:17 +0800
committerBrian Behlendorf <[email protected]>2014-04-10 14:28:51 -0700
commitb761912b3473f09a642eea21d609ce9bc1c91546 (patch)
tree7ddeae7c8957961dab2175308f3dc65f6cb0b5f8 /include/linux
parent22760eebeff0e0ad826132b1be1113eecb39938a (diff)
Linux 3.14 compat: rq_for_each_segment in dmu_req_copy
rq_for_each_segment changed from taking bio_vec * to taking bio_vec. We provide rq_for_each_segment4 which takes both. Signed-off-by: Chunwei Chen <[email protected]> Signed-off-by: Richard Yao <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Issue #2124
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/blkdev_compat.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/include/linux/blkdev_compat.h b/include/linux/blkdev_compat.h
index be22ae700..8566033fc 100644
--- a/include/linux/blkdev_compat.h
+++ b/include/linux/blkdev_compat.h
@@ -284,8 +284,32 @@ struct req_iterator {
#define rq_for_each_segment(bvl, _rq, _iter) \
__rq_for_each_bio(_iter.bio, _rq) \
bio_for_each_segment(bvl, _iter.bio, _iter.i)
+
+#define HAVE_RQ_FOR_EACH_SEGMENT_BVP 1
#endif /* HAVE_RQ_FOR_EACH_SEGMENT */
+/*
+ * 3.14 API change
+ * rq_for_each_segment changed from taking bio_vec * to taking bio_vec.
+ * We provide rq_for_each_segment4 which takes both.
+ * You should not modify the fields in @bv and @bvp.
+ *
+ * Note: the if-else is just to inject the assignment before the loop body.
+ */
+#ifdef HAVE_RQ_FOR_EACH_SEGMENT_BVP
+#define rq_for_each_segment4(bv, bvp, rq, iter) \
+ rq_for_each_segment(bvp, rq, iter) \
+ if ((bv = *bvp), 0) \
+ ; \
+ else
+#else
+#define rq_for_each_segment4(bv, bvp, rq, iter) \
+ rq_for_each_segment(bv, rq, iter) \
+ if ((bvp = &bv), 0) \
+ ; \
+ else
+#endif
+
#ifdef HAVE_BIO_BVEC_ITER
#define BIO_BI_SECTOR(bio) (bio)->bi_iter.bi_sector
#define BIO_BI_SIZE(bio) (bio)->bi_iter.bi_size