FreeBSD: avoid memory allocation in arc_prune_async
Reviewed-by: Ryan Moeller <ryan@ixsystems.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Closes #12049
This commit is contained in:
parent
90c0524535
commit
211cee4fcf
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user