mirror_zfs/config/kernel-filemap-splice-read.m4
Coleman Kane 36261c8238
Linux 6.5 compat: replace generic_file_splice_read with filemap_splice_read
The generic_file_splice_read function was removed in Linux 6.5 in favor
of filemap_splice_read. Add an autoconf test for filemap_splice_read and
use it if it is found as the handler for .splice_read in the
file_operations struct. Additionally, ITER_PIPE was removed in 6.5. This
change removes the ITER_* macros that OpenZFS doesn't use from being
tested in config/kernel-vfs-iov_iter.m4. The removal of ITER_PIPE was
causing the test to fail, which also affected the code responsible for
setting the .splice_read handler, above. That behavior caused run-time
panics on Linux 6.5.

Reviewed-by: Brian Atkinson <batkinson@lanl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Coleman Kane <ckane@colemankane.org>
Closes #15155
2023-08-07 15:47:46 -07:00

26 lines
702 B
Plaintext

AC_DEFUN([ZFS_AC_KERNEL_SRC_FILEMAP_SPLICE_READ], [
dnl #
dnl # Kernel 6.5 - generic_file_splice_read was removed in favor
dnl # of filemap_splice_read for the .splice_read member of the
dnl # file_operations struct.
dnl #
ZFS_LINUX_TEST_SRC([has_filemap_splice_read], [
#include <linux/fs.h>
struct file_operations fops __attribute__((unused)) = {
.splice_read = filemap_splice_read,
};
],[])
])
AC_DEFUN([ZFS_AC_KERNEL_FILEMAP_SPLICE_READ], [
AC_MSG_CHECKING([whether filemap_splice_read() exists])
ZFS_LINUX_TEST_RESULT([has_filemap_splice_read], [
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_FILEMAP_SPLICE_READ, 1,
[filemap_splice_read exists])
],[
AC_MSG_RESULT(no)
])
])