Skip to content

Commit c84f9be

Browse files
amotintonyhutter
authored andcommitted
FreeBSD: avoid memory allocation in arc_prune_async
Reviewed-by: Ryan Moeller <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Alexander Motin <[email protected]> Closes openzfs#12049
1 parent 5ea770b commit c84f9be

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed

module/os/freebsd/zfs/arc_os.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,9 @@ arc_default_max(uint64_t min, uint64_t allmem)
158158
static void
159159
arc_prune_task(void *arg)
160160
{
161-
int64_t nr_scan = *(int64_t *)arg;
161+
int64_t nr_scan = (intptr_t)arg;
162162

163163
arc_reduce_target_size(ptob(nr_scan));
164-
free(arg, M_TEMP);
165164
#if __FreeBSD_version >= 1300139
166165
sx_xlock(&arc_vnlru_lock);
167166
vnlru_free_vfsops(nr_scan, &zfs_vfsops, arc_vnlru_marker);
@@ -186,13 +185,12 @@ void
186185
arc_prune_async(int64_t adjust)
187186
{
188187

189-
int64_t *adjustptr;
190-
191-
if ((adjustptr = malloc(sizeof (int64_t), M_TEMP, M_NOWAIT)) == NULL)
192-
return;
193-
194-
*adjustptr = adjust;
195-
taskq_dispatch(arc_prune_taskq, arc_prune_task, adjustptr, TQ_SLEEP);
188+
#ifndef __LP64__
189+
if (adjust > INTPTR_MAX)
190+
adjust = INTPTR_MAX;
191+
#endif
192+
taskq_dispatch(arc_prune_taskq, arc_prune_task,
193+
(void *)(intptr_t)adjust, TQ_SLEEP);
196194
ARCSTAT_BUMP(arcstat_prune);
197195
}
198196

0 commit comments

Comments
 (0)