Linux 5.16: type member of iov_iter renamed iter_type
The iov_iter->type member was renamed iov_iter->iter_type. However, while looking into this, realized that in 2018 a iov_iter_type(*iov) accessor function was introduced. So if that is present, use it, otherwise fall back to trying the existing behavior of directly accessing type from iov_iter. Reviewed-by: Tony Hutter <hutter2@llnl.gov> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Coleman Kane <ckane@colemankane.org> Closes #12819
This commit is contained in:
parent
649b3ce987
commit
eb9d35e641
|
@ -99,6 +99,14 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_VFS_IOV_ITER], [
|
||||||
|
|
||||||
bytes = copy_from_iter((void *)&buf, size, &iter);
|
bytes = copy_from_iter((void *)&buf, size, &iter);
|
||||||
])
|
])
|
||||||
|
|
||||||
|
ZFS_LINUX_TEST_SRC([iov_iter_type], [
|
||||||
|
#include <linux/fs.h>
|
||||||
|
#include <linux/uio.h>
|
||||||
|
],[
|
||||||
|
struct iov_iter iter = { 0 };
|
||||||
|
__attribute__((unused)) enum iter_type i = iov_iter_type(&iter);
|
||||||
|
])
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_VFS_IOV_ITER], [
|
AC_DEFUN([ZFS_AC_KERNEL_VFS_IOV_ITER], [
|
||||||
|
@ -193,6 +201,20 @@ AC_DEFUN([ZFS_AC_KERNEL_VFS_IOV_ITER], [
|
||||||
enable_vfs_iov_iter="no"
|
enable_vfs_iov_iter="no"
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # This checks for iov_iter_type() in linux/uio.h. It is not
|
||||||
|
dnl # required, however, and the module will compiled without it
|
||||||
|
dnl # using direct access of the member attribute
|
||||||
|
dnl #
|
||||||
|
AC_MSG_CHECKING([whether iov_iter_type() is available])
|
||||||
|
ZFS_LINUX_TEST_RESULT([iov_iter_type], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_IOV_ITER_TYPE, 1,
|
||||||
|
[iov_iter_type() is available])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
|
||||||
dnl #
|
dnl #
|
||||||
dnl # As of the 4.9 kernel support is provided for iovecs, kvecs,
|
dnl # As of the 4.9 kernel support is provided for iovecs, kvecs,
|
||||||
dnl # bvecs and pipes in the iov_iter structure. As long as the
|
dnl # bvecs and pipes in the iov_iter structure. As long as the
|
||||||
|
|
|
@ -250,11 +250,17 @@ zpl_uio_init(zfs_uio_t *uio, struct kiocb *kiocb, struct iov_iter *to,
|
||||||
{
|
{
|
||||||
#if defined(HAVE_VFS_IOV_ITER)
|
#if defined(HAVE_VFS_IOV_ITER)
|
||||||
zfs_uio_iov_iter_init(uio, to, pos, count, skip);
|
zfs_uio_iov_iter_init(uio, to, pos, count, skip);
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_IOV_ITER_TYPE
|
||||||
|
zfs_uio_iovec_init(uio, to->iov, to->nr_segs, pos,
|
||||||
|
iov_iter_type(to) & ITER_KVEC ? UIO_SYSSPACE : UIO_USERSPACE,
|
||||||
|
count, skip);
|
||||||
#else
|
#else
|
||||||
zfs_uio_iovec_init(uio, to->iov, to->nr_segs, pos,
|
zfs_uio_iovec_init(uio, to->iov, to->nr_segs, pos,
|
||||||
to->type & ITER_KVEC ? UIO_SYSSPACE : UIO_USERSPACE,
|
to->type & ITER_KVEC ? UIO_SYSSPACE : UIO_USERSPACE,
|
||||||
count, skip);
|
count, skip);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
|
|
Loading…
Reference in New Issue