aboutsummaryrefslogtreecommitdiffstats
path: root/module
diff options
context:
space:
mode:
Diffstat (limited to 'module')
-rw-r--r--module/os/freebsd/zfs/arc_os.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/module/os/freebsd/zfs/arc_os.c b/module/os/freebsd/zfs/arc_os.c
index 201dbc423..05377bb7e 100644
--- a/module/os/freebsd/zfs/arc_os.c
+++ b/module/os/freebsd/zfs/arc_os.c
@@ -158,10 +158,9 @@ arc_default_max(uint64_t min, uint64_t allmem)
static void
arc_prune_task(void *arg)
{
- int64_t nr_scan = *(int64_t *)arg;
+ int64_t nr_scan = (intptr_t)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);
@@ -186,13 +185,12 @@ void
arc_prune_async(int64_t adjust)
{
- int64_t *adjustptr;
-
- if ((adjustptr = malloc(sizeof (int64_t), M_TEMP, M_NOWAIT)) == NULL)
- return;
-
- *adjustptr = adjust;
- taskq_dispatch(arc_prune_taskq, arc_prune_task, adjustptr, TQ_SLEEP);
+#ifndef __LP64__
+ if (adjust > INTPTR_MAX)
+ adjust = INTPTR_MAX;
+#endif
+ taskq_dispatch(arc_prune_taskq, arc_prune_task,
+ (void *)(intptr_t)adjust, TQ_SLEEP);
ARCSTAT_BUMP(arcstat_prune);
}