diff options
author | Mateusz Guzik <mjguzik@gmail.com> | 2021-04-12 20:01:46 +0200 |
---|---|---|
committer | Tony Hutter <hutter2@llnl.gov> | 2021-06-23 13:22:15 -0700 |
commit | 52d9bc7174e25cd331741a34cdc1c1cb02f28e1f (patch) | |
tree | 1cefa7490a600c6e11702bfcb0ee27a2fbd6fec3 | |
parent | 6905f6b2c1576a3d5473c9d142e6f4e295e0221d (diff) |
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
-rw-r--r-- | module/os/freebsd/zfs/arc_os.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/module/os/freebsd/zfs/arc_os.c b/module/os/freebsd/zfs/arc_os.c index 94df75003..ad9b25772 100644 --- a/module/os/freebsd/zfs/arc_os.c +++ b/module/os/freebsd/zfs/arc_os.c @@ -51,6 +51,11 @@ #include <sys/vm.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; uint_t zfs_arc_free_target = 0; @@ -157,7 +162,13 @@ arc_prune_task(void *arg) arc_reduce_target_size(ptob(nr_scan)); 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); +#endif } /* @@ -234,7 +245,10 @@ arc_lowmem_init(void) { arc_event_lowmem = EVENTHANDLER_REGISTER(vm_lowmem, arc_lowmem, NULL, EVENTHANDLER_PRI_FIRST); - +#if __FreeBSD_version >= 1300139 + arc_vnlru_marker = vnlru_alloc_marker(); + sx_init(&arc_vnlru_lock, "arc vnlru lock"); +#endif } void @@ -242,4 +256,10 @@ arc_lowmem_fini(void) { if (arc_event_lowmem != NULL) 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 } |