diff options
author | Tomohiro Kusumi <[email protected]> | 2019-05-05 08:40:48 +0900 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2019-05-04 16:40:48 -0700 |
commit | de3e0b914b28deaf9034656d8f6e0bdf9ccd7c7f (patch) | |
tree | 6b41b5e17cd7a41680de5212982a55546c06b8cf | |
parent | 1eacf2b3b0a1d3bccaab83dece44d671ba30292d (diff) |
Linux 5.0 compat: Use totalhigh_pages()
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 <[email protected]>
Signed-off-by: Tomohiro Kusumi <[email protected]>
Closes #8677
Closes #8701
-rw-r--r-- | config/kernel-totalhigh_pages.m4 | 19 | ||||
-rw-r--r-- | config/kernel.m4 | 1 | ||||
-rw-r--r-- | include/spl/sys/vmsystm.h | 6 | ||||
-rw-r--r-- | module/zfs/arc.c | 2 |
4 files changed, 27 insertions, 1 deletions
diff --git a/config/kernel-totalhigh_pages.m4 b/config/kernel-totalhigh_pages.m4 new file mode 100644 index 000000000..b22e86d4d --- /dev/null +++ b/config/kernel-totalhigh_pages.m4 @@ -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) + ]) +]) diff --git a/config/kernel.m4 b/config/kernel.m4 index f7d657e0c..026a5258f 100644 --- a/config/kernel.m4 +++ b/config/kernel.m4 @@ -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 diff --git a/include/spl/sys/vmsystm.h b/include/spl/sys/vmsystm.h index 6bdfc852a..5807d960a 100644 --- a/include/spl/sys/vmsystm.h +++ b/include/spl/sys/vmsystm.h @@ -39,6 +39,12 @@ #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() + \ diff --git a/module/zfs/arc.c b/module/zfs/arc.c index c72487894..9b500352a 100644 --- a/module/zfs/arc.c +++ b/module/zfs/arc.c @@ -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 */ |