diff options
author | Brian Behlendorf <[email protected]> | 2016-07-27 02:23:53 +0000 |
---|---|---|
committer | Ned Bass <[email protected]> | 2016-09-09 13:21:09 -0700 |
commit | 68b8d22c6e3c30a59b20879efab1d46824686bdf (patch) | |
tree | ad05db9963a8c79bad1f03d652c9261a562917bc | |
parent | 3d824a8878faa1fcea1b33ebe01dc35121fa347f (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.m4 | 20 | ||||
-rw-r--r-- | config/kernel.m4 | 1 | ||||
-rw-r--r-- | module/zfs/vdev_disk.c | 15 |
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 } |