Linux 2.6.36 compat, use REQ_FAILFAST_MASK

As of linux-2.6.36 the BIO_RW_FAILFAST and REQ_FAILFAST flags
have been unified under the REQ_* names.  These flags always had
to be kept in-sync so this is a nice step forward, unfortunately
it means we need to be careful to only use the new unified flags
when the BIO_RW_* flags are not defined.  Additional autoconf
checks were added for this and if it is ever unclear which method
to use no flags are set.  This is safe but may result in longer
delays before a disk is failed.

Perferred interface for setting FAILFAST on a bio:
  2.6.12-2.6.27: BIO_RW_FAILFAST
  2.6.28-2.6.35: BIO_RW_FAILFAST_{DEV|TRANSPORT|DRIVER}
  2.6.36-2.6.xx: REQ_FAILFAST_{DEV|TRANSPORT|DRIVER}
This commit is contained in:
Brian Behlendorf
2010-11-10 14:40:38 -08:00
parent b04cffc9b0
commit f4af6bb783
5 changed files with 329 additions and 13 deletions
+37 -4
View File
@@ -1,9 +1,26 @@
dnl #
dnl # 2.6.28 API change
dnl # Device, transport, and driver FAILFAST flags were added and
dnl # the now legacy BIO_RW_FAILFAST flag was removed.
dnl # Preferred interface for setting FAILFAST on a bio:
dnl # 2.6.12-2.6.27: BIO_RW_FAILFAST
dnl # 2.6.28-2.6.35: BIO_RW_FAILFAST_{DEV|TRANSPORT|DRIVER}
dnl # 2.6.36-2.6.xx: REQ_FAILFAST_{DEV|TRANSPORT|DRIVER}
dnl #
AC_DEFUN([ZFS_AC_KERNEL_BIO_FAILFAST], [
AC_MSG_CHECKING([whether BIO_RW_FAILFAST is defined])
ZFS_LINUX_TRY_COMPILE([
#include <linux/bio.h>
],[
int flags;
flags = (1 << BIO_RW_FAILFAST);
],[
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_BIO_RW_FAILFAST, 1,
[BIO_RW_FAILFAST is defined])
],[
AC_MSG_RESULT(no)
])
])
AC_DEFUN([ZFS_AC_KERNEL_BIO_FAILFAST_DTD], [
AC_MSG_CHECKING([whether BIO_RW_FAILFAST_* are defined])
ZFS_LINUX_TRY_COMPILE([
#include <linux/bio.h>
@@ -14,9 +31,25 @@ AC_DEFUN([ZFS_AC_KERNEL_BIO_FAILFAST], [
(1 << BIO_RW_FAILFAST_DRIVER));
],[
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_BIO_RW_FAILFAST, 1,
AC_DEFINE(HAVE_BIO_RW_FAILFAST_DTD, 1,
[BIO_RW_FAILFAST_* are defined])
],[
AC_MSG_RESULT(no)
])
])
AC_DEFUN([ZFS_AC_KERNEL_REQ_FAILFAST_MASK], [
AC_MSG_CHECKING([whether REQ_FAILFAST_MASK is defined])
ZFS_LINUX_TRY_COMPILE([
#include <linux/bio.h>
],[
int flags;
flags = REQ_FAILFAST_MASK;
],[
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_BIO_REQ_FAILFAST_MASK, 1,
[REQ_FAILFAST_MASK is defined])
],[
AC_MSG_RESULT(no)
])
])
+2
View File
@@ -13,6 +13,8 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
ZFS_AC_KERNEL_BDEV_LOGICAL_BLOCK_SIZE
ZFS_AC_KERNEL_BIO_EMPTY_BARRIER
ZFS_AC_KERNEL_BIO_FAILFAST
ZFS_AC_KERNEL_BIO_FAILFAST_DTD
ZFS_AC_KERNEL_REQ_FAILFAST_MASK
ZFS_AC_KERNEL_BIO_END_IO_T_ARGS
ZFS_AC_KERNEL_BIO_RW_SYNCIO
ZFS_AC_KERNEL_BLK_END_REQUEST