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
6905f6b2c1
commit
52d9bc7174
|
@ -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,4 +256,10 @@ 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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue