xref: /freebsd/sys/contrib/openzfs/config/kernel-vfs-iov_iter.m4 (revision 315ee00fa9616b0a192b6834911f98bcf5316a6b)
17877fdebSMatt Macydnl #
27877fdebSMatt Macydnl # Check for available iov_iter functionality.
37877fdebSMatt Macydnl #
47877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_VFS_IOV_ITER], [
57877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([iov_iter_types], [
67877fdebSMatt Macy		#include <linux/fs.h>
77877fdebSMatt Macy		#include <linux/uio.h>
87877fdebSMatt Macy	],[
9*315ee00fSMartin Matuska		int type __attribute__ ((unused)) = ITER_KVEC;
107877fdebSMatt Macy	])
117877fdebSMatt Macy
127877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([iov_iter_advance], [
137877fdebSMatt Macy		#include <linux/fs.h>
147877fdebSMatt Macy		#include <linux/uio.h>
157877fdebSMatt Macy	],[
167877fdebSMatt Macy		struct iov_iter iter = { 0 };
177877fdebSMatt Macy		size_t advance = 512;
187877fdebSMatt Macy
197877fdebSMatt Macy		iov_iter_advance(&iter, advance);
207877fdebSMatt Macy	])
217877fdebSMatt Macy
227877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([iov_iter_revert], [
237877fdebSMatt Macy		#include <linux/fs.h>
247877fdebSMatt Macy		#include <linux/uio.h>
257877fdebSMatt Macy	],[
267877fdebSMatt Macy		struct iov_iter iter = { 0 };
277877fdebSMatt Macy		size_t revert = 512;
287877fdebSMatt Macy
297877fdebSMatt Macy		iov_iter_revert(&iter, revert);
307877fdebSMatt Macy	])
317877fdebSMatt Macy
327877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([iov_iter_fault_in_readable], [
337877fdebSMatt Macy		#include <linux/fs.h>
347877fdebSMatt Macy		#include <linux/uio.h>
357877fdebSMatt Macy	],[
367877fdebSMatt Macy		struct iov_iter iter = { 0 };
377877fdebSMatt Macy		size_t size = 512;
387877fdebSMatt Macy		int error __attribute__ ((unused));
397877fdebSMatt Macy
407877fdebSMatt Macy		error = iov_iter_fault_in_readable(&iter, size);
417877fdebSMatt Macy	])
427877fdebSMatt Macy
43c03c5b1cSMartin Matuska	ZFS_LINUX_TEST_SRC([fault_in_iov_iter_readable], [
44c03c5b1cSMartin Matuska		#include <linux/fs.h>
45c03c5b1cSMartin Matuska		#include <linux/uio.h>
46c03c5b1cSMartin Matuska	],[
47c03c5b1cSMartin Matuska		struct iov_iter iter = { 0 };
48c03c5b1cSMartin Matuska		size_t size = 512;
49c03c5b1cSMartin Matuska		int error __attribute__ ((unused));
50c03c5b1cSMartin Matuska
51c03c5b1cSMartin Matuska		error = fault_in_iov_iter_readable(&iter, size);
52c03c5b1cSMartin Matuska	])
53c03c5b1cSMartin Matuska
547877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([iov_iter_count], [
557877fdebSMatt Macy		#include <linux/fs.h>
567877fdebSMatt Macy		#include <linux/uio.h>
577877fdebSMatt Macy	],[
587877fdebSMatt Macy		struct iov_iter iter = { 0 };
597877fdebSMatt Macy		size_t bytes __attribute__ ((unused));
607877fdebSMatt Macy
617877fdebSMatt Macy		bytes = iov_iter_count(&iter);
627877fdebSMatt Macy	])
637877fdebSMatt Macy
647877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([copy_to_iter], [
657877fdebSMatt Macy		#include <linux/fs.h>
667877fdebSMatt Macy		#include <linux/uio.h>
677877fdebSMatt Macy	],[
687877fdebSMatt Macy		struct iov_iter iter = { 0 };
697877fdebSMatt Macy		char buf[512] = { 0 };
707877fdebSMatt Macy		size_t size = 512;
717877fdebSMatt Macy		size_t bytes __attribute__ ((unused));
727877fdebSMatt Macy
737877fdebSMatt Macy		bytes = copy_to_iter((const void *)&buf, size, &iter);
747877fdebSMatt Macy	])
757877fdebSMatt Macy
767877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([copy_from_iter], [
777877fdebSMatt Macy		#include <linux/fs.h>
787877fdebSMatt Macy		#include <linux/uio.h>
797877fdebSMatt Macy	],[
807877fdebSMatt Macy		struct iov_iter iter = { 0 };
817877fdebSMatt Macy		char buf[512] = { 0 };
827877fdebSMatt Macy		size_t size = 512;
837877fdebSMatt Macy		size_t bytes __attribute__ ((unused));
847877fdebSMatt Macy
857877fdebSMatt Macy		bytes = copy_from_iter((void *)&buf, size, &iter);
867877fdebSMatt Macy	])
87681ce946SMartin Matuska
88681ce946SMartin Matuska	ZFS_LINUX_TEST_SRC([iov_iter_type], [
89681ce946SMartin Matuska		#include <linux/fs.h>
90681ce946SMartin Matuska		#include <linux/uio.h>
91681ce946SMartin Matuska	],[
92681ce946SMartin Matuska		struct iov_iter iter = { 0 };
93681ce946SMartin Matuska		__attribute__((unused)) enum iter_type i = iov_iter_type(&iter);
94681ce946SMartin Matuska	])
95*315ee00fSMartin Matuska
96*315ee00fSMartin Matuska	ZFS_LINUX_TEST_SRC([iter_iov], [
97*315ee00fSMartin Matuska		#include <linux/fs.h>
98*315ee00fSMartin Matuska		#include <linux/uio.h>
99*315ee00fSMartin Matuska	],[
100*315ee00fSMartin Matuska		struct iov_iter iter = { 0 };
101*315ee00fSMartin Matuska		__attribute__((unused)) const struct iovec *iov = iter_iov(&iter);
102*315ee00fSMartin Matuska	])
1037877fdebSMatt Macy])
1047877fdebSMatt Macy
1057877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_VFS_IOV_ITER], [
1067877fdebSMatt Macy	enable_vfs_iov_iter="yes"
1077877fdebSMatt Macy
1087877fdebSMatt Macy	AC_MSG_CHECKING([whether iov_iter types are available])
1097877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([iov_iter_types], [
1107877fdebSMatt Macy		AC_MSG_RESULT(yes)
1117877fdebSMatt Macy		AC_DEFINE(HAVE_IOV_ITER_TYPES, 1,
1127877fdebSMatt Macy		    [iov_iter types are available])
1137877fdebSMatt Macy	],[
1147877fdebSMatt Macy		AC_MSG_RESULT(no)
1157877fdebSMatt Macy		enable_vfs_iov_iter="no"
1167877fdebSMatt Macy	])
1177877fdebSMatt Macy
1187877fdebSMatt Macy	AC_MSG_CHECKING([whether iov_iter_advance() is available])
1197877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([iov_iter_advance], [
1207877fdebSMatt Macy		AC_MSG_RESULT(yes)
1217877fdebSMatt Macy		AC_DEFINE(HAVE_IOV_ITER_ADVANCE, 1,
1227877fdebSMatt Macy		    [iov_iter_advance() is available])
1237877fdebSMatt Macy	],[
1247877fdebSMatt Macy		AC_MSG_RESULT(no)
1257877fdebSMatt Macy		enable_vfs_iov_iter="no"
1267877fdebSMatt Macy	])
1277877fdebSMatt Macy
1287877fdebSMatt Macy	AC_MSG_CHECKING([whether iov_iter_revert() is available])
1297877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([iov_iter_revert], [
1307877fdebSMatt Macy		AC_MSG_RESULT(yes)
1317877fdebSMatt Macy		AC_DEFINE(HAVE_IOV_ITER_REVERT, 1,
1327877fdebSMatt Macy		    [iov_iter_revert() is available])
1337877fdebSMatt Macy	],[
1347877fdebSMatt Macy		AC_MSG_RESULT(no)
1357877fdebSMatt Macy		enable_vfs_iov_iter="no"
1367877fdebSMatt Macy	])
1377877fdebSMatt Macy
1387877fdebSMatt Macy	AC_MSG_CHECKING([whether iov_iter_fault_in_readable() is available])
1397877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([iov_iter_fault_in_readable], [
1407877fdebSMatt Macy		AC_MSG_RESULT(yes)
1417877fdebSMatt Macy		AC_DEFINE(HAVE_IOV_ITER_FAULT_IN_READABLE, 1,
1427877fdebSMatt Macy		    [iov_iter_fault_in_readable() is available])
1437877fdebSMatt Macy	],[
144e3aa18adSMartin Matuska		AC_MSG_RESULT(no)
145e3aa18adSMartin Matuska
146c03c5b1cSMartin Matuska		AC_MSG_CHECKING([whether fault_in_iov_iter_readable() is available])
147c03c5b1cSMartin Matuska		ZFS_LINUX_TEST_RESULT([fault_in_iov_iter_readable], [
148c03c5b1cSMartin Matuska			AC_MSG_RESULT(yes)
149c03c5b1cSMartin Matuska			AC_DEFINE(HAVE_FAULT_IN_IOV_ITER_READABLE, 1,
150c03c5b1cSMartin Matuska			    [fault_in_iov_iter_readable() is available])
151c03c5b1cSMartin Matuska		],[
1527877fdebSMatt Macy			AC_MSG_RESULT(no)
1537877fdebSMatt Macy			enable_vfs_iov_iter="no"
1547877fdebSMatt Macy		])
155c03c5b1cSMartin Matuska	])
1567877fdebSMatt Macy
1577877fdebSMatt Macy	AC_MSG_CHECKING([whether iov_iter_count() is available])
1587877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([iov_iter_count], [
1597877fdebSMatt Macy		AC_MSG_RESULT(yes)
1607877fdebSMatt Macy		AC_DEFINE(HAVE_IOV_ITER_COUNT, 1,
1617877fdebSMatt Macy		    [iov_iter_count() is available])
1627877fdebSMatt Macy	],[
1637877fdebSMatt Macy		AC_MSG_RESULT(no)
1647877fdebSMatt Macy		enable_vfs_iov_iter="no"
1657877fdebSMatt Macy	])
1667877fdebSMatt Macy
1677877fdebSMatt Macy	AC_MSG_CHECKING([whether copy_to_iter() is available])
1687877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([copy_to_iter], [
1697877fdebSMatt Macy		AC_MSG_RESULT(yes)
1707877fdebSMatt Macy		AC_DEFINE(HAVE_COPY_TO_ITER, 1,
1717877fdebSMatt Macy		    [copy_to_iter() is available])
1727877fdebSMatt Macy	],[
1737877fdebSMatt Macy		AC_MSG_RESULT(no)
1747877fdebSMatt Macy		enable_vfs_iov_iter="no"
1757877fdebSMatt Macy	])
1767877fdebSMatt Macy
1777877fdebSMatt Macy	AC_MSG_CHECKING([whether copy_from_iter() is available])
1787877fdebSMatt Macy	ZFS_LINUX_TEST_RESULT([copy_from_iter], [
1797877fdebSMatt Macy		AC_MSG_RESULT(yes)
1807877fdebSMatt Macy		AC_DEFINE(HAVE_COPY_FROM_ITER, 1,
1817877fdebSMatt Macy		    [copy_from_iter() is available])
1827877fdebSMatt Macy	],[
1837877fdebSMatt Macy		AC_MSG_RESULT(no)
1847877fdebSMatt Macy		enable_vfs_iov_iter="no"
1857877fdebSMatt Macy	])
1867877fdebSMatt Macy
1877877fdebSMatt Macy	dnl #
188681ce946SMartin Matuska	dnl # This checks for iov_iter_type() in linux/uio.h. It is not
189681ce946SMartin Matuska	dnl # required, however, and the module will compiled without it
190681ce946SMartin Matuska	dnl # using direct access of the member attribute
191681ce946SMartin Matuska	dnl #
192681ce946SMartin Matuska	AC_MSG_CHECKING([whether iov_iter_type() is available])
193681ce946SMartin Matuska	ZFS_LINUX_TEST_RESULT([iov_iter_type], [
194681ce946SMartin Matuska		AC_MSG_RESULT(yes)
195681ce946SMartin Matuska		AC_DEFINE(HAVE_IOV_ITER_TYPE, 1,
196681ce946SMartin Matuska		    [iov_iter_type() is available])
197681ce946SMartin Matuska	],[
198681ce946SMartin Matuska		AC_MSG_RESULT(no)
199681ce946SMartin Matuska	])
200681ce946SMartin Matuska
201681ce946SMartin Matuska	dnl #
2027877fdebSMatt Macy	dnl # As of the 4.9 kernel support is provided for iovecs, kvecs,
2037877fdebSMatt Macy	dnl # bvecs and pipes in the iov_iter structure.  As long as the
2047877fdebSMatt Macy	dnl # other support interfaces are all available the iov_iter can
2057877fdebSMatt Macy	dnl # be correctly used in the uio structure.
2067877fdebSMatt Macy	dnl #
2077877fdebSMatt Macy	AS_IF([test "x$enable_vfs_iov_iter" = "xyes"], [
2087877fdebSMatt Macy		AC_DEFINE(HAVE_VFS_IOV_ITER, 1,
2097877fdebSMatt Macy		    [All required iov_iter interfaces are available])
2107877fdebSMatt Macy	])
211*315ee00fSMartin Matuska
212*315ee00fSMartin Matuska	dnl #
213*315ee00fSMartin Matuska	dnl # Kernel 6.5 introduces the iter_iov() function that returns the
214*315ee00fSMartin Matuska	dnl # __iov member of an iov_iter*. The iov member was renamed to this
215*315ee00fSMartin Matuska	dnl # __iov member, and is intended to be accessed via the helper
216*315ee00fSMartin Matuska	dnl # function now.
217*315ee00fSMartin Matuska	dnl #
218*315ee00fSMartin Matuska	AC_MSG_CHECKING([whether iter_iov() is available])
219*315ee00fSMartin Matuska	ZFS_LINUX_TEST_RESULT([iter_iov], [
220*315ee00fSMartin Matuska		AC_MSG_RESULT(yes)
221*315ee00fSMartin Matuska		AC_DEFINE(HAVE_ITER_IOV, 1,
222*315ee00fSMartin Matuska		    [iter_iov() is available])
223*315ee00fSMartin Matuska	],[
224*315ee00fSMartin Matuska		AC_MSG_RESULT(no)
225*315ee00fSMartin Matuska	])
2267877fdebSMatt Macy])
227