Whamcloud - gitweb
LU-15933 libcfs: fix configure check for iov_iter member
authorBobi Jam <bobijam@whamcloud.com>
Fri, 10 Jun 2022 18:16:26 +0000 (02:16 +0800)
committerAndreas Dilger <adilger@whamcloud.com>
Thu, 16 Jun 2022 20:36:47 +0000 (20:36 +0000)
Kernel commit v5.13-rc1-12-g8cd54c1c8480 changed iov_iter member
->type to ->iter_type, add check at configure to cover this change.

Lustre-change: https://review.whamcloud.com/47601
Lustre-commit: TBD (from f6bce444082d44d3dec9db00bce63dc92092c927)

Signed-off-by: Bobi Jam <bobijam@whamcloud.com>
Change-Id: I8da26e1f6c6242a3260b458770ec34a65aecaf7d
Reviewed-on: https://review.whamcloud.com/47603
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
libcfs/autoconf/lustre-libcfs.m4

index cc6b5c1..5ead7fd 100644 (file)
@@ -201,10 +201,13 @@ shrinker_count_objects, [
 #
 # kernel 3.15-rc4 commit 71d8e532b1549a478e6a6a8a44f309d050294d00
 # start adding the tag to iov_iter
+# kernel 5.13 commit 8cd54c1c848031a87820e58d772166ffdf8c08c0 change
+# ->type to ->iter_type
 #
 AC_DEFUN([LIBCFS_IOV_ITER_HAS_TYPE], [
 tmp_flags="$EXTRA_KCFLAGS"
 EXTRA_KCFLAGS="-Werror"
+iter_type_member=no
 LB_CHECK_COMPILE([if iov_iter has member type],
 iov_iter_has_type_member, [
        #include <linux/uio.h>
@@ -214,7 +217,21 @@ iov_iter_has_type_member, [
 ],[
        AC_DEFINE(HAVE_IOV_ITER_HAS_TYPE_MEMBER, 1,
                [if iov_iter has member type])
+       iter_type_member=yes
 ])
+if test $iter_type_member = no; then
+  LB_CHECK_COMPILE([if iov_iter has member iter_type],
+  iov_iter_has_iter_type_member, [
+       #include <linux/uio.h>
+  ],[
+       struct iov_iter iter = { .iter_type = ITER_KVEC };
+       (void)iter;
+  ],[
+       AC_DEFINE(HAVE_IOV_ITER_HAS_TYPE_MEMBER, 1,
+               [if iov_iter has member iter_type])
+       iter_type_member=yes
+  ])
+fi
 EXTRA_KCFLAGS="$tmp_flags"
 ]) # LIBCFS_IOV_ITER_HAS_TYPE
 
@@ -1283,7 +1300,7 @@ LB_CHECK_COMPILE([if iov_iter_type exists],
 macro_iov_iter_type_exists, [
        #include <linux/uio.h>
 ],[
-       struct iov_iter iter = { .type = ITER_KVEC };
+       struct iov_iter iter = { };
        enum iter_type type = iov_iter_type(&iter);
        (void)type;
 ],[