summaryrefslogtreecommitdiffstats
path: root/config/kernel-vfs-direct_IO.m4
diff options
context:
space:
mode:
Diffstat (limited to 'config/kernel-vfs-direct_IO.m4')
-rw-r--r--config/kernel-vfs-direct_IO.m4145
1 files changed, 62 insertions, 83 deletions
diff --git a/config/kernel-vfs-direct_IO.m4 b/config/kernel-vfs-direct_IO.m4
index cc50bfbe4..82583d52f 100644
--- a/config/kernel-vfs-direct_IO.m4
+++ b/config/kernel-vfs-direct_IO.m4
@@ -1,9 +1,8 @@
dnl #
-dnl # Linux 4.6.x API change
+dnl # Check for direct IO interfaces.
dnl #
-AC_DEFUN([ZFS_AC_KERNEL_VFS_DIRECT_IO_ITER], [
- AC_MSG_CHECKING([whether aops->direct_IO() uses iov_iter])
- ZFS_LINUX_TRY_COMPILE([
+AC_DEFUN([ZFS_AC_KERNEL_SRC_VFS_DIRECT_IO], [
+ ZFS_LINUX_TEST_SRC([direct_io_iter], [
#include <linux/fs.h>
ssize_t test_direct_IO(struct kiocb *kiocb,
@@ -13,24 +12,9 @@ AC_DEFUN([ZFS_AC_KERNEL_VFS_DIRECT_IO_ITER], [
aops __attribute__ ((unused)) = {
.direct_IO = test_direct_IO,
};
- ],[
- ],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_VFS_DIRECT_IO_ITER, 1,
- [aops->direct_IO() uses iov_iter without rw])
- zfs_ac_direct_io="yes"
- ],[
- AC_MSG_RESULT([no])
- ])
-])
+ ],[])
-dnl #
-dnl # Linux 4.1.x API change
-dnl #
-AC_DEFUN([ZFS_AC_KERNEL_VFS_DIRECT_IO_ITER_OFFSET], [
- AC_MSG_CHECKING(
- [whether aops->direct_IO() uses iov_iter with offset])
- ZFS_LINUX_TRY_COMPILE([
+ ZFS_LINUX_TEST_SRC([direct_io_iter_offset], [
#include <linux/fs.h>
ssize_t test_direct_IO(struct kiocb *kiocb,
@@ -40,24 +24,9 @@ AC_DEFUN([ZFS_AC_KERNEL_VFS_DIRECT_IO_ITER_OFFSET], [
aops __attribute__ ((unused)) = {
.direct_IO = test_direct_IO,
};
- ],[
- ],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_VFS_DIRECT_IO_ITER_OFFSET, 1,
- [aops->direct_IO() uses iov_iter with offset])
- zfs_ac_direct_io="yes"
- ],[
- AC_MSG_RESULT([no])
- ])
-])
+ ],[])
-dnl #
-dnl # Linux 3.16.x API change
-dnl #
-AC_DEFUN([ZFS_AC_KERNEL_VFS_DIRECT_IO_ITER_RW_OFFSET], [
- AC_MSG_CHECKING(
- [whether aops->direct_IO() uses iov_iter with rw and offset])
- ZFS_LINUX_TRY_COMPILE([
+ ZFS_LINUX_TEST_SRC([direct_io_iter_rw_offset], [
#include <linux/fs.h>
ssize_t test_direct_IO(int rw, struct kiocb *kiocb,
@@ -67,23 +36,9 @@ AC_DEFUN([ZFS_AC_KERNEL_VFS_DIRECT_IO_ITER_RW_OFFSET], [
aops __attribute__ ((unused)) = {
.direct_IO = test_direct_IO,
};
- ],[
- ],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_VFS_DIRECT_IO_ITER_RW_OFFSET, 1,
- [aops->direct_IO() uses iov_iter with rw and offset])
- zfs_ac_direct_io="yes"
- ],[
- AC_MSG_RESULT([no])
- ])
-])
+ ],[])
-dnl #
-dnl # Ancient Linux API (predates git)
-dnl #
-AC_DEFUN([ZFS_AC_KERNEL_VFS_DIRECT_IO_IOVEC], [
- AC_MSG_CHECKING([whether aops->direct_IO() uses iovec])
- ZFS_LINUX_TRY_COMPILE([
+ ZFS_LINUX_TEST_SRC([direct_io_iovec], [
#include <linux/fs.h>
ssize_t test_direct_IO(int rw, struct kiocb *kiocb,
@@ -94,37 +49,61 @@ AC_DEFUN([ZFS_AC_KERNEL_VFS_DIRECT_IO_IOVEC], [
aops __attribute__ ((unused)) = {
.direct_IO = test_direct_IO,
};
- ],[
- ],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_VFS_DIRECT_IO_IOVEC, 1,
- [aops->direct_IO() uses iovec])
- zfs_ac_direct_io="yes"
- ],[
- AC_MSG_RESULT([no])
- ])
+ ],[])
])
AC_DEFUN([ZFS_AC_KERNEL_VFS_DIRECT_IO], [
- zfs_ac_direct_io="no"
-
- if test "$zfs_ac_direct_io" = "no"; then
- ZFS_AC_KERNEL_VFS_DIRECT_IO_ITER
- fi
-
- if test "$zfs_ac_direct_io" = "no"; then
- ZFS_AC_KERNEL_VFS_DIRECT_IO_ITER_OFFSET
- fi
-
- if test "$zfs_ac_direct_io" = "no"; then
- ZFS_AC_KERNEL_VFS_DIRECT_IO_ITER_RW_OFFSET
- fi
-
- if test "$zfs_ac_direct_io" = "no"; then
- ZFS_AC_KERNEL_VFS_DIRECT_IO_IOVEC
- fi
+ dnl #
+ dnl # Linux 4.6.x API change
+ dnl #
+ AC_MSG_CHECKING([whether aops->direct_IO() uses iov_iter])
+ ZFS_LINUX_TEST_RESULT([direct_io_iter], [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_VFS_DIRECT_IO_ITER, 1,
+ [aops->direct_IO() uses iov_iter without rw])
+ ],[
+ AC_MSG_RESULT([no])
- if test "$zfs_ac_direct_io" = "no"; then
- AC_MSG_ERROR([no; unknown direct IO interface])
- fi
+ dnl #
+ dnl # Linux 4.1.x API change
+ dnl #
+ AC_MSG_CHECKING(
+ [whether aops->direct_IO() uses offset])
+ ZFS_LINUX_TEST_RESULT([direct_io_iter_offset], [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_VFS_DIRECT_IO_ITER_OFFSET, 1,
+ [aops->direct_IO() uses iov_iter with offset])
+
+ ],[
+ AC_MSG_RESULT([no])
+
+ dnl #
+ dnl # Linux 3.16.x API change
+ dnl #
+ AC_MSG_CHECKING(
+ [whether aops->direct_IO() uses rw and offset])
+ ZFS_LINUX_TEST_RESULT([direct_io_iter_rw_offset], [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_VFS_DIRECT_IO_ITER_RW_OFFSET, 1,
+ [aops->direct_IO() uses iov_iter with ]
+ [rw and offset])
+ ],[
+ AC_MSG_RESULT([no])
+
+ dnl #
+ dnl # Ancient Linux API (predates git)
+ dnl #
+ AC_MSG_CHECKING(
+ [whether aops->direct_IO() uses iovec])
+ ZFS_LINUX_TEST_RESULT([direct_io_iovec], [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_VFS_DIRECT_IO_IOVEC, 1,
+ [aops->direct_IO() uses iovec])
+ ],[
+ ZFS_LINUX_TEST_ERROR([direct IO])
+ AC_MSG_RESULT([no])
+ ])
+ ])
+ ])
+ ])
])