2 dnl # Check for available iov_iter functionality.
4 AC_DEFUN([ZFS_AC_KERNEL_SRC_VFS_IOV_ITER], [
5 ZFS_LINUX_TEST_SRC([iov_iter_types], [
9 int type __attribute__ ((unused)) =
10 ITER_IOVEC | ITER_KVEC | ITER_BVEC | ITER_PIPE;
13 ZFS_LINUX_TEST_SRC([iov_iter_advance], [
15 #include <linux/uio.h>
17 struct iov_iter iter = { 0 };
20 iov_iter_advance(&iter, advance);
23 ZFS_LINUX_TEST_SRC([iov_iter_revert], [
25 #include <linux/uio.h>
27 struct iov_iter iter = { 0 };
30 iov_iter_revert(&iter, revert);
33 ZFS_LINUX_TEST_SRC([iov_iter_fault_in_readable], [
35 #include <linux/uio.h>
37 struct iov_iter iter = { 0 };
39 int error __attribute__ ((unused));
41 error = iov_iter_fault_in_readable(&iter, size);
44 ZFS_LINUX_TEST_SRC([iov_iter_count], [
46 #include <linux/uio.h>
48 struct iov_iter iter = { 0 };
49 size_t bytes __attribute__ ((unused));
51 bytes = iov_iter_count(&iter);
54 ZFS_LINUX_TEST_SRC([copy_to_iter], [
56 #include <linux/uio.h>
58 struct iov_iter iter = { 0 };
59 char buf[512] = { 0 };
61 size_t bytes __attribute__ ((unused));
63 bytes = copy_to_iter((const void *)&buf, size, &iter);
66 ZFS_LINUX_TEST_SRC([copy_from_iter], [
68 #include <linux/uio.h>
70 struct iov_iter iter = { 0 };
71 char buf[512] = { 0 };
73 size_t bytes __attribute__ ((unused));
75 bytes = copy_from_iter((void *)&buf, size, &iter);
79 AC_DEFUN([ZFS_AC_KERNEL_VFS_IOV_ITER], [
80 enable_vfs_iov_iter="yes"
82 AC_MSG_CHECKING([whether iov_iter types are available])
83 ZFS_LINUX_TEST_RESULT([iov_iter_types], [
85 AC_DEFINE(HAVE_IOV_ITER_TYPES, 1,
86 [iov_iter types are available])
89 enable_vfs_iov_iter="no"
92 AC_MSG_CHECKING([whether iov_iter_advance() is available])
93 ZFS_LINUX_TEST_RESULT([iov_iter_advance], [
95 AC_DEFINE(HAVE_IOV_ITER_ADVANCE, 1,
96 [iov_iter_advance() is available])
99 enable_vfs_iov_iter="no"
102 AC_MSG_CHECKING([whether iov_iter_revert() is available])
103 ZFS_LINUX_TEST_RESULT([iov_iter_revert], [
105 AC_DEFINE(HAVE_IOV_ITER_REVERT, 1,
106 [iov_iter_revert() is available])
109 enable_vfs_iov_iter="no"
112 AC_MSG_CHECKING([whether iov_iter_fault_in_readable() is available])
113 ZFS_LINUX_TEST_RESULT([iov_iter_fault_in_readable], [
115 AC_DEFINE(HAVE_IOV_ITER_FAULT_IN_READABLE, 1,
116 [iov_iter_fault_in_readable() is available])
119 enable_vfs_iov_iter="no"
122 AC_MSG_CHECKING([whether iov_iter_count() is available])
123 ZFS_LINUX_TEST_RESULT([iov_iter_count], [
125 AC_DEFINE(HAVE_IOV_ITER_COUNT, 1,
126 [iov_iter_count() is available])
129 enable_vfs_iov_iter="no"
132 AC_MSG_CHECKING([whether copy_to_iter() is available])
133 ZFS_LINUX_TEST_RESULT([copy_to_iter], [
135 AC_DEFINE(HAVE_COPY_TO_ITER, 1,
136 [copy_to_iter() is available])
139 enable_vfs_iov_iter="no"
142 AC_MSG_CHECKING([whether copy_from_iter() is available])
143 ZFS_LINUX_TEST_RESULT([copy_from_iter], [
145 AC_DEFINE(HAVE_COPY_FROM_ITER, 1,
146 [copy_from_iter() is available])
149 enable_vfs_iov_iter="no"
153 dnl # As of the 4.9 kernel support is provided for iovecs, kvecs,
154 dnl # bvecs and pipes in the iov_iter structure. As long as the
155 dnl # other support interfaces are all available the iov_iter can
156 dnl # be correctly used in the uio structure.
158 AS_IF([test "x$enable_vfs_iov_iter" = "xyes"], [
159 AC_DEFINE(HAVE_VFS_IOV_ITER, 1,
160 [All required iov_iter interfaces are available])