summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2016-07-27 02:23:53 +0000
committerNed Bass <[email protected]>2016-09-09 13:21:09 -0700
commit68b8d22c6e3c30a59b20879efab1d46824686bdf (patch)
treead05db9963a8c79bad1f03d652c9261a562917bc
parent3d824a8878faa1fcea1b33ebe01dc35121fa347f (diff)
Linux 4.8 compat: submit_bio()
The rw argument has been removed from submit_bio/submit_bio_wait. Callers are now expected to set bio->bi_rw instead of passing it in. See https://github.com/torvalds/linux/commit/4e49ea4a for complete details. Signed-off-by: Tim Chase <[email protected]> Signed-off-by: Chunwei Chen <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Issue #4892 Issue #4899
-rw-r--r--config/kernel-submit_bio.m420
-rw-r--r--config/kernel.m41
-rw-r--r--module/zfs/vdev_disk.c15
3 files changed, 34 insertions, 2 deletions
diff --git a/config/kernel-submit_bio.m4 b/config/kernel-submit_bio.m4
new file mode 100644
index 000000000..da5f85ca7
--- /dev/null
+++ b/config/kernel-submit_bio.m4
@@ -0,0 +1,20 @@
+dnl #
+dnl # 4.8 API change
+dnl # The rw argument has been removed from submit_bio/submit_bio_wait.
+dnl # Callers are now expected to set bio->bi_rw instead of passing it in.
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SUBMIT_BIO], [
+ AC_MSG_CHECKING([whether submit_bio() wants 1 arg])
+ ZFS_LINUX_TRY_COMPILE([
+ #include <linux/bio.h>
+ ],[
+ blk_qc_t blk_qc;
+ struct bio *bio = NULL;
+ blk_qc = submit_bio(bio);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_1ARG_SUBMIT_BIO, 1, [submit_bio() wants 1 arg])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
diff --git a/config/kernel.m4 b/config/kernel.m4
index 7307d452d..a9bf3e6f5 100644
--- a/config/kernel.m4
+++ b/config/kernel.m4
@@ -8,6 +8,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
ZFS_AC_KERNEL_CONFIG
ZFS_AC_KERNEL_DECLARE_EVENT_CLASS
ZFS_AC_KERNEL_CURRENT_BIO_TAIL
+ ZFS_AC_KERNEL_SUBMIT_BIO
ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS
ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID
ZFS_AC_KERNEL_TYPE_FMODE_T
diff --git a/module/zfs/vdev_disk.c b/module/zfs/vdev_disk.c
index 9b51ecc1d..7c515def0 100644
--- a/module/zfs/vdev_disk.c
+++ b/module/zfs/vdev_disk.c
@@ -495,17 +495,28 @@ bio_map(struct bio *bio, void *bio_ptr, unsigned int bio_size)
}
static inline void
+vdev_submit_bio_impl(int rw, struct bio *bio)
+{
+#ifdef HAVE_1ARG_SUBMIT_BIO
+ bio->bi_rw |= rw;
+ submit_bio(bio);
+#else
+ submit_bio(rw, bio);
+#endif
+}
+
+static inline void
vdev_submit_bio(int rw, struct bio *bio)
{
#ifdef HAVE_CURRENT_BIO_TAIL
struct bio **bio_tail = current->bio_tail;
current->bio_tail = NULL;
- submit_bio(rw, bio);
+ vdev_submit_bio_impl(rw, bio);
current->bio_tail = bio_tail;
#else
struct bio_list *bio_list = current->bio_list;
current->bio_list = NULL;
- submit_bio(rw, bio);
+ vdev_submit_bio_impl(rw, bio);
current->bio_list = bio_list;
#endif
}