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