From e909a45d22be9645f8bca27bfc4db6912648e1be Mon Sep 17 00:00:00 2001 From: Chunwei Chen Date: Mon, 23 Nov 2015 14:47:29 -0800 Subject: [PATCH] Linux 4.4 compat: make_request_fn returns blk_qc_t As part of block polling support in Linux 4.4, make_request_fn should return a cookie value of type blk_qc_t. For now, we make zvol_request always return BLK_QC_T_NONE until we assess whether and how we want to support block polling. Signed-off-by: Chunwei Chen Signed-off-by: Brian Behlendorf Issue #4021 --- config/kernel-mk-request-fn.m4 | 26 ++++++++++++++++++++++++-- module/zfs/zvol.c | 2 ++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/config/kernel-mk-request-fn.m4 b/config/kernel-mk-request-fn.m4 index 88ee2ebb3d..57eebe23de 100644 --- a/config/kernel-mk-request-fn.m4 +++ b/config/kernel-mk-request-fn.m4 @@ -2,6 +2,9 @@ dnl # dnl # Linux 3.2 API Change dnl # make_request_fn returns void instead of int. dnl # +dnl # Linux 4.4 API Change +dnl # make_request_fn returns blk_qc_t. +dnl # AC_DEFUN([ZFS_AC_KERNEL_MAKE_REQUEST_FN], [ AC_MSG_CHECKING([whether make_request_fn() returns int]) ZFS_LINUX_TRY_COMPILE([ @@ -36,8 +39,27 @@ AC_DEFUN([ZFS_AC_KERNEL_MAKE_REQUEST_FN], [ AC_DEFINE(MAKE_REQUEST_FN_RET, void, [make_request_fn() returns void]) ],[ - AC_MSG_ERROR(no - Please file a bug report at - https://github.com/zfsonlinux/zfs/issues/new) + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether make_request_fn() returns blk_qc_t]) + ZFS_LINUX_TRY_COMPILE([ + #include + + blk_qc_t make_request(struct request_queue *q, struct bio *bio) + { + return (BLK_QC_T_NONE); + } + ],[ + blk_queue_make_request(NULL, &make_request); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(MAKE_REQUEST_FN_RET, blk_qc_t, + [make_request_fn() returns blk_qc_t]) + AC_DEFINE(HAVE_MAKE_REQUEST_FN_RET_QC, 1, + [Noting that make_request_fn() returns blk_qc_t]) + ],[ + AC_MSG_ERROR(no - Please file a bug report at + https://github.com/zfsonlinux/zfs/issues/new) + ]) ]) ]) ]) diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index c81f02a390..613b47ef92 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -756,6 +756,8 @@ out1: spl_fstrans_unmark(cookie); #ifdef HAVE_MAKE_REQUEST_FN_RET_INT return (0); +#elif defined(HAVE_MAKE_REQUEST_FN_RET_QC) + return (BLK_QC_T_NONE); #endif }