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