]> granicus.if.org Git - zfs/commitdiff
Linux 5.0 compat: Use totalhigh_pages()
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Sat, 4 May 2019 23:40:48 +0000 (08:40 +0900)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Sat, 4 May 2019 23:40:48 +0000 (16:40 -0700)
Linux kernel commit ca79b0c211af63fa3276f0e3fd7dd9ada2439839
"mm: convert totalram_pages and totalhigh_pages variables to atomic"

replaced `totalhigh_pages` with an inline function `totalhigh_pages()`.
This broke compilation on IA32, etc, as ZoL uses `totalhigh_pages`
on archs with highmem. Confirmed on Fedora 30 (5.0.9-301.fc30.i686).

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@gmail.com>
Closes #8677
Closes #8701

config/kernel-totalhigh_pages.m4 [new file with mode: 0644]
config/kernel.m4
include/spl/sys/vmsystm.h
module/zfs/arc.c

diff --git a/config/kernel-totalhigh_pages.m4 b/config/kernel-totalhigh_pages.m4
new file mode 100644 (file)
index 0000000..b22e86d
--- /dev/null
@@ -0,0 +1,19 @@
+dnl #
+dnl # 5.0 API change
+dnl #
+dnl # ca79b0c211af mm: convert totalram_pages and totalhigh_pages variables to atomic
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_TOTALHIGH_PAGES], [
+       AC_MSG_CHECKING([whether totalhigh_pages() exists])
+       ZFS_LINUX_TRY_COMPILE([
+               #include <linux/highmem.h>
+       ],[
+               unsigned long pages __attribute__ ((unused));
+               pages = totalhigh_pages();
+       ],[
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_TOTALHIGH_PAGES, 1, [totalhigh_pages() exists])
+       ],[
+               AC_MSG_RESULT(no)
+       ])
+])
index f7d657e0ca3160a1809434812a338c332bb0d700..026a5258f9f03f89fd88832d892167ae7517e121 100644 (file)
@@ -164,6 +164,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_IN_COMPAT_SYSCALL
        ZFS_AC_KERNEL_KTIME_GET_COARSE_REAL_TS64
        ZFS_AC_KERNEL_TOTALRAM_PAGES_FUNC
+       ZFS_AC_KERNEL_TOTALHIGH_PAGES
        ZFS_AC_KERNEL_BLK_QUEUE_DISCARD
        ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE
 
index 6bdfc852ac0a2c5d3d99dacc65e1384108b25ae9..5807d960add5c2b65f382480f04691c2976b3115 100644 (file)
 #define        zfs_totalram_pages      totalram_pages
 #endif
 
+#ifdef HAVE_TOTALHIGH_PAGES
+#define        zfs_totalhigh_pages     totalhigh_pages()
+#else
+#define        zfs_totalhigh_pages     totalhigh_pages
+#endif
+
 #define        membar_producer()               smp_wmb()
 #define        physmem                         zfs_totalram_pages
 #define        freemem                 (nr_free_pages() + \
index c724878948d513ed0cecc246166d3466af8014ab..9b500352a4c07b638fe3b63ba117903393bf387f 100644 (file)
@@ -4828,7 +4828,7 @@ arc_all_memory(void)
 {
 #ifdef _KERNEL
 #ifdef CONFIG_HIGHMEM
-       return (ptob(zfs_totalram_pages - totalhigh_pages));
+       return (ptob(zfs_totalram_pages - zfs_totalhigh_pages));
 #else
        return (ptob(zfs_totalram_pages));
 #endif /* CONFIG_HIGHMEM */