mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	FreeBSD: use vnlru_free_vfsops if available
Fixes issues when zfs is used along with other filesystems. External-issue: https://cgit.freebsd.org/src/commit/?id=e9272225e6bed840b00eef1c817b188c172338ee Reviewed-by: Ryan Moeller <ryan@iXsystems.com> Signed-off-by: Mateusz Guzik <mjguzik@gmail.com> Closes #11881
This commit is contained in:
		
							parent
							
								
									a6b82cc0bb
								
							
						
					
					
						commit
						2aa0d643fd
					
				| @ -51,6 +51,11 @@ | |||||||
| #include <sys/vm.h> | #include <sys/vm.h> | ||||||
| #include <sys/vmmeter.h> | #include <sys/vmmeter.h> | ||||||
| 
 | 
 | ||||||
|  | #if __FreeBSD_version >= 1300139 | ||||||
|  | static struct sx arc_vnlru_lock; | ||||||
|  | static struct vnode *arc_vnlru_marker; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| extern struct vfsops zfs_vfsops; | extern struct vfsops zfs_vfsops; | ||||||
| 
 | 
 | ||||||
| uint_t zfs_arc_free_target = 0; | uint_t zfs_arc_free_target = 0; | ||||||
| @ -157,7 +162,13 @@ arc_prune_task(void *arg) | |||||||
| 
 | 
 | ||||||
| 	arc_reduce_target_size(ptob(nr_scan)); | 	arc_reduce_target_size(ptob(nr_scan)); | ||||||
| 	free(arg, M_TEMP); | 	free(arg, M_TEMP); | ||||||
|  | #if __FreeBSD_version >= 1300139 | ||||||
|  | 	sx_xlock(&arc_vnlru_lock); | ||||||
|  | 	vnlru_free_vfsops(nr_scan, &zfs_vfsops, arc_vnlru_marker); | ||||||
|  | 	sx_xunlock(&arc_vnlru_lock); | ||||||
|  | #else | ||||||
| 	vnlru_free(nr_scan, &zfs_vfsops); | 	vnlru_free(nr_scan, &zfs_vfsops); | ||||||
|  | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
| @ -234,7 +245,10 @@ arc_lowmem_init(void) | |||||||
| { | { | ||||||
| 	arc_event_lowmem = EVENTHANDLER_REGISTER(vm_lowmem, arc_lowmem, NULL, | 	arc_event_lowmem = EVENTHANDLER_REGISTER(vm_lowmem, arc_lowmem, NULL, | ||||||
| 	    EVENTHANDLER_PRI_FIRST); | 	    EVENTHANDLER_PRI_FIRST); | ||||||
| 
 | #if __FreeBSD_version >= 1300139 | ||||||
|  | 	arc_vnlru_marker = vnlru_alloc_marker(); | ||||||
|  | 	sx_init(&arc_vnlru_lock, "arc vnlru lock"); | ||||||
|  | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
| @ -242,6 +256,12 @@ arc_lowmem_fini(void) | |||||||
| { | { | ||||||
| 	if (arc_event_lowmem != NULL) | 	if (arc_event_lowmem != NULL) | ||||||
| 		EVENTHANDLER_DEREGISTER(vm_lowmem, arc_event_lowmem); | 		EVENTHANDLER_DEREGISTER(vm_lowmem, arc_event_lowmem); | ||||||
|  | #if __FreeBSD_version >= 1300139 | ||||||
|  | 	if (arc_vnlru_marker != NULL) { | ||||||
|  | 		vnlru_free_marker(arc_vnlru_marker); | ||||||
|  | 		sx_destroy(&arc_vnlru_lock); | ||||||
|  | 	} | ||||||
|  | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Mateusz Guzik
						Mateusz Guzik