]> granicus.if.org Git - zfs/commitdiff
Linux 2.6.39 compat: Test if kstrtoul() exists
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Fri, 24 May 2019 19:26:18 +0000 (04:26 +0900)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 24 May 2019 19:26:18 +0000 (12:26 -0700)
kstrtoul() exists only after torvalds/linux@33ee3b2e2eb9 in 2.6.39.
Use strict_strtoul() if kstrtoul() doesn't exist.
Note that strict_strtoul() has existed as an alias for kstrtoul()
for a while, but removed in torvalds/linux@3db2e9cdc085.

It looks like RHEL6 (2.6.32 based) has backported kstrtoul(),
and this caused build CI to pass compilation test.
It should fail on vanilla < 2.6.39 kernels or distro kernels without
backport as reported in #8760.

--
 # grep "kstrtoul(" /lib/modules/2.6.32-754.12.1.el6.x86_64/build/ \
 include/linux/kernel.h >/dev/null
 # echo $?
 0

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: loli10K <ezomori.nozomu@gmail.com>
Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@gmail.com>
Closes #8760
Closes #8761

config/kernel-kstrtoul.m4 [new file with mode: 0644]
config/kernel.m4
include/spl/sys/strings.h

diff --git a/config/kernel-kstrtoul.m4 b/config/kernel-kstrtoul.m4
new file mode 100644 (file)
index 0000000..5530e0e
--- /dev/null
@@ -0,0 +1,21 @@
+dnl #
+dnl # 2.6.39 API change
+dnl #
+dnl # 33ee3b2e2eb9 kstrto*: converting strings to integers done (hopefully) right
+dnl #
+dnl # If kstrtoul() doesn't exist, fallback to use strict_strtoul() which has
+dnl # existed since 2.6.25.
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_KSTRTOUL], [
+       AC_MSG_CHECKING([whether kstrtoul() exists])
+       ZFS_LINUX_TRY_COMPILE([
+               #include <linux/kernel.h>
+       ],[
+               int ret __attribute__ ((unused)) = kstrtoul(NULL, 10, NULL);
+       ],[
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_KSTRTOUL, 1, [kstrtoul() exists])
+       ],[
+               AC_MSG_RESULT(no)
+       ])
+])
index 54f39164bb5f2c39e91e06cb22ec224afc7790dc..6fd0ad5b9f252be702a32f655d2c82e6fd1f549d 100644 (file)
@@ -167,6 +167,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_TOTALHIGH_PAGES
        ZFS_AC_KERNEL_BLK_QUEUE_DISCARD
        ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE
+       ZFS_AC_KERNEL_KSTRTOUL
 
        AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
                KERNEL_MAKE="$KERNEL_MAKE O=$LINUX_OBJ"
index 4fb80320635c44c2bf2598bee4889cb8f669a7e4..8b810c9af24f6d15e306406104de74220e6d3e05 100644 (file)
@@ -28,4 +28,8 @@
 #define        bcopy(src, dest, size)          memmove(dest, src, size)
 #define        bcmp(src, dest, size)           memcmp((src), (dest), (size_t)(size))
 
+#ifndef HAVE_KSTRTOUL
+#define        kstrtoul strict_strtoul
+#endif
+
 #endif /* _SPL_SYS_STRINGS_H */