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
5ea770b0a2
commit
c84f9be5c7
|
@ -158,10 +158,9 @@ arc_default_max(uint64_t min, uint64_t allmem)
|
||||||
static void
|
static void
|
||||||
arc_prune_task(void *arg)
|
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));
|
arc_reduce_target_size(ptob(nr_scan));
|
||||||
free(arg, M_TEMP);
|
|
||||||
#if __FreeBSD_version >= 1300139
|
#if __FreeBSD_version >= 1300139
|
||||||
sx_xlock(&arc_vnlru_lock);
|
sx_xlock(&arc_vnlru_lock);
|
||||||
vnlru_free_vfsops(nr_scan, &zfs_vfsops, arc_vnlru_marker);
|
vnlru_free_vfsops(nr_scan, &zfs_vfsops, arc_vnlru_marker);
|
||||||
|
@ -186,13 +185,12 @@ void
|
||||||
arc_prune_async(int64_t adjust)
|
arc_prune_async(int64_t adjust)
|
||||||
{
|
{
|
||||||
|
|
||||||
int64_t *adjustptr;
|
#ifndef __LP64__
|
||||||
|
if (adjust > INTPTR_MAX)
|
||||||
if ((adjustptr = malloc(sizeof (int64_t), M_TEMP, M_NOWAIT)) == NULL)
|
adjust = INTPTR_MAX;
|
||||||
return;
|
#endif
|
||||||
|
taskq_dispatch(arc_prune_taskq, arc_prune_task,
|
||||||
*adjustptr = adjust;
|
(void *)(intptr_t)adjust, TQ_SLEEP);
|
||||||
taskq_dispatch(arc_prune_taskq, arc_prune_task, adjustptr, TQ_SLEEP);
|
|
||||||
ARCSTAT_BUMP(arcstat_prune);
|
ARCSTAT_BUMP(arcstat_prune);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue