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 + ],[ + 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 */