mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 19:19:32 +03:00
Linux 4.8+ compatibility fix for vm stats
vm_node_stat must be used instead of vm_zone_stat. Unfortunately the old code still compiles potentially leading to silent failure of arc_evictable_memory() AKAMAI: CR 3816601: Regression in zfs dropcache test Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Chunwei Chen <tuxoko@gmail.com> Signed-off-by: Debabrata Banerjee <dbanerje@akamai.com> Closes #6528
This commit is contained in:
parent
4810a108e8
commit
89950722c6
22
config/kernel-vm_node_stat.m4
Normal file
22
config/kernel-vm_node_stat.m4
Normal file
@ -0,0 +1,22 @@
|
||||
dnl #
|
||||
dnl # 4.8 API change
|
||||
dnl # kernel vm counters change
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_KERNEL_VM_NODE_STAT], [
|
||||
AC_MSG_CHECKING([whether to use vm_node_stat based fn's])
|
||||
ZFS_LINUX_TRY_COMPILE([
|
||||
#include <linux/mm.h>
|
||||
#include <linux/vmstat.h>
|
||||
],[
|
||||
int a __attribute__ ((unused)) = NR_VM_NODE_STAT_ITEMS;
|
||||
long x __attribute__ ((unused)) =
|
||||
atomic_long_read(&vm_node_stat[0]);
|
||||
(void) global_node_page_state(0);
|
||||
],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(ZFS_GLOBAL_NODE_PAGE_STATE, 1,
|
||||
[using global_node_page_state()])
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
])
|
@ -120,6 +120,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
|
||||
ZFS_AC_KERNEL_RENAME_WANTS_FLAGS
|
||||
ZFS_AC_KERNEL_HAVE_GENERIC_SETXATTR
|
||||
ZFS_AC_KERNEL_CURRENT_TIME
|
||||
ZFS_AC_KERNEL_VM_NODE_STAT
|
||||
|
||||
AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
|
||||
KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
|
||||
|
@ -4387,8 +4387,13 @@ arc_evictable_memory(void)
|
||||
* Scale reported evictable memory in proportion to page cache, cap
|
||||
* at specified min/max.
|
||||
*/
|
||||
#ifdef ZFS_GLOBAL_NODE_PAGE_STATE
|
||||
uint64_t min = (ptob(global_node_page_state(NR_FILE_PAGES)) / 100) *
|
||||
zfs_arc_pc_percent;
|
||||
#else
|
||||
uint64_t min = (ptob(global_page_state(NR_FILE_PAGES)) / 100) *
|
||||
zfs_arc_pc_percent;
|
||||
#endif
|
||||
min = MAX(arc_c_min, MIN(arc_c_max, min));
|
||||
|
||||
if (arc_dirty >= min)
|
||||
|
Loading…
Reference in New Issue
Block a user