summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorTomohiro Kusumi <[email protected]>2019-05-25 04:26:18 +0900
committerBrian Behlendorf <[email protected]>2019-05-24 12:26:18 -0700
commit8708fd888f8a2bd3c68ccc059a579ba7ff41f79d (patch)
tree7232e088cfefed488c10871a1307ab7407b59fe3 /config
parent2e8c315fc6a9999e3c51c4b409dcd10a9e1accda (diff)
Linux 2.6.39 compat: Test if kstrtoul() exists
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 <[email protected]> Reviewed-by: loli10K <[email protected]> Signed-off-by: Tomohiro Kusumi <[email protected]> Closes #8760 Closes #8761
Diffstat (limited to 'config')
-rw-r--r--config/kernel-kstrtoul.m421
-rw-r--r--config/kernel.m41
2 files changed, 22 insertions, 0 deletions
diff --git a/config/kernel-kstrtoul.m4 b/config/kernel-kstrtoul.m4
new file mode 100644
index 000000000..5530e0e2d
--- /dev/null
+++ b/config/kernel-kstrtoul.m4
@@ -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)
+ ])
+])
diff --git a/config/kernel.m4 b/config/kernel.m4
index 54f39164b..6fd0ad5b9 100644
--- a/config/kernel.m4
+++ b/config/kernel.m4
@@ -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"