diff --git a/config/kernel-totalram-pages-func.m4 b/config/kernel-totalram-pages-func.m4 new file mode 100644 index 0000000000..a6eac64543 --- /dev/null +++ b/config/kernel-totalram-pages-func.m4 @@ -0,0 +1,18 @@ +dnl # +dnl # Linux 5.0: totalram_pages is no longer a global variable, and must be +dnl # read via the totalram_pages() helper function. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_TOTALRAM_PAGES_FUNC], [ + AC_MSG_CHECKING([whether totalram_pages() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + unsigned long pages __attribute__ ((unused)); + pages = totalram_pages(); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TOTALRAM_PAGES_FUNC, 1, [kernel has totalram_pages()]) + ],[ + AC_MSG_RESULT(no) + ]) +]) diff --git a/config/kernel.m4 b/config/kernel.m4 index ea04d85b6c..e4d0e3393b 100644 --- a/config/kernel.m4 +++ b/config/kernel.m4 @@ -163,6 +163,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ ZFS_AC_KERNEL_USERNS_CAPABILITIES ZFS_AC_KERNEL_IN_COMPAT_SYSCALL ZFS_AC_KERNEL_KTIME_GET_COARSE_REAL_TS64 + ZFS_AC_KERNEL_TOTALRAM_PAGES_FUNC AS_IF([test "$LINUX_OBJ" != "$LINUX"], [ KERNEL_MAKE="$KERNEL_MAKE O=$LINUX_OBJ" diff --git a/include/spl/sys/vmsystm.h b/include/spl/sys/vmsystm.h index 2b48fe0e36..6bdfc852ac 100644 --- a/include/spl/sys/vmsystm.h +++ b/include/spl/sys/vmsystm.h @@ -33,8 +33,14 @@ #include #include +#ifdef HAVE_TOTALRAM_PAGES_FUNC +#define zfs_totalram_pages totalram_pages() +#else +#define zfs_totalram_pages totalram_pages +#endif + #define membar_producer() smp_wmb() -#define physmem totalram_pages +#define physmem zfs_totalram_pages #define freemem (nr_free_pages() + \ global_page_state(NR_INACTIVE_FILE) + \ global_page_state(NR_INACTIVE_ANON) + \ diff --git a/module/zfs/arc.c b/module/zfs/arc.c index 7e09633345..f5d94cbf90 100644 --- a/module/zfs/arc.c +++ b/module/zfs/arc.c @@ -4821,9 +4821,9 @@ arc_all_memory(void) { #ifdef _KERNEL #ifdef CONFIG_HIGHMEM - return (ptob(totalram_pages - totalhigh_pages)); + return (ptob(zfs_totalram_pages - totalhigh_pages)); #else - return (ptob(totalram_pages)); + return (ptob(zfs_totalram_pages)); #endif /* CONFIG_HIGHMEM */ #else return (ptob(physmem) / 2);