]) # LIBCFS_SHRINKER_COUNT
#
+# LIBCFS_IOV_ITER_HAS_TYPE
+#
+# kernel 3.15-rc4 commit 71d8e532b1549a478e6a6a8a44f309d050294d00
+# start adding the tag to iov_iter
+#
+AC_DEFUN([LIBCFS_IOV_ITER_HAS_TYPE], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if iov_iter has member type],
+iov_iter_has_type_member, [
+ #include <linux/uio.h>
+],[
+ struct iov_iter iter = { .type = ITER_KVEC };
+ (void)iter;
+],[
+ AC_DEFINE(HAVE_IOV_ITER_HAS_TYPE_MEMBER, 1,
+ [if iov_iter has member type])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_IOV_ITER_HAS_TYPE
+
+#
# Kernel version 3.17 changed hlist_add_after to
# hlist_add_behind
#
]) # LIBCFS_CLEAR_AND_WAKE_UP_BIT
#
+# LIBCFS_HAVE_IOV_ITER_TYPE
+#
+# kernel 4.20 commit 00e23707442a75b404392cef1405ab4fd498de6b
+# iov_iter: Use accessor functions to access an iterator's type and direction.
+#
+AC_DEFUN([LIBCFS_HAVE_IOV_ITER_TYPE], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if iov_iter_type exists],
+macro_iov_iter_type_exists, [
+ #include <linux/uio.h>
+],[
+ struct iov_iter iter = { .type = ITER_KVEC };
+ enum iter_type type = iov_iter_type(&iter);
+ (void)type;
+],[
+ AC_DEFINE(HAVE_IOV_ITER_TYPE, 1,
+ [if iov_iter_type exists])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_HAVE_IOV_ITER_TYPE
+
+#
# LIBCFS_PROG_LINUX
#
# LibCFS linux kernel checks
LIBCFS_KTIME_BEFORE
LIBCFS_KTIME_COMPARE
LIBCFS_SHRINKER_COUNT
+# 3.15
+LIBCFS_IOV_ITER_HAS_TYPE
# 3.17
LIBCFS_HLIST_ADD_AFTER
LIBCFS_TIMESPEC64
LIBCFS_WAIT_VAR_EVENT
# 4.17
LIBCFS_CLEAR_AND_WAKE_UP_BIT
+# 4.20
+LIBCFS_HAVE_IOV_ITER_TYPE
# 5.0
LIBCFS_MM_TOTALRAM_PAGES_FUNC
]) # LIBCFS_PROG_LINUX