mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +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_RENAME_WANTS_FLAGS | ||||||
| 	ZFS_AC_KERNEL_HAVE_GENERIC_SETXATTR | 	ZFS_AC_KERNEL_HAVE_GENERIC_SETXATTR | ||||||
| 	ZFS_AC_KERNEL_CURRENT_TIME | 	ZFS_AC_KERNEL_CURRENT_TIME | ||||||
|  | 	ZFS_AC_KERNEL_VM_NODE_STAT | ||||||
| 
 | 
 | ||||||
| 	AS_IF([test "$LINUX_OBJ" != "$LINUX"], [ | 	AS_IF([test "$LINUX_OBJ" != "$LINUX"], [ | ||||||
| 		KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ" | 		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 | 	 * Scale reported evictable memory in proportion to page cache, cap | ||||||
| 	 * at specified min/max. | 	 * 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) * | 	uint64_t min = (ptob(global_page_state(NR_FILE_PAGES)) / 100) * | ||||||
| 	    zfs_arc_pc_percent; | 	    zfs_arc_pc_percent; | ||||||
|  | #endif | ||||||
| 	min = MAX(arc_c_min, MIN(arc_c_max, min)); | 	min = MAX(arc_c_min, MIN(arc_c_max, min)); | ||||||
| 
 | 
 | ||||||
| 	if (arc_dirty >= min) | 	if (arc_dirty >= min) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 dbavatar
						dbavatar