FreeBSD: Improve taskq wrapper
commitb76724ae478a7c2f73693b39d8009101efb54995
authorAlexander Motin <mav@FreeBSD.org>
Fri, 13 Oct 2023 17:41:11 +0000 (13 13:41 -0400)
committerTony Hutter <hutter2@llnl.gov>
Tue, 7 Nov 2023 00:33:18 +0000 (6 16:33 -0800)
treed4ab3688506425f41948ec1166cb107271b6c014
parent459c99ff2339a4a514abcf2255f9b3e5324ef09e
FreeBSD: Improve taskq wrapper

- Group tqent_task and tqent_timeout_task into a union.  They are
never used same time. This shrinks taskq_ent_t from 192 to 160 bytes.
 - Remove tqent_registered.  Use tqent_id != 0 instead.
 - Remove tqent_cancelled.  Use taskqueue pending counter instead.
 - Change tqent_type into uint_t.  We don't need to pack it any more.
 - Change tqent_rc into uint_t, matching refcount(9).
 - Take shared locks in taskq_lookup().
 - Call proper taskqueue_drain_timeout() for TIMEOUT_TASK in
taskq_cancel_id() and taskq_wait_id().
 - Switch from CK_LIST to regular LIST.

Reviewed-by: Allan Jude <allan@klarasystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Mateusz Guzik <mjguzik@gmail.com>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Sponsored by: iXsystems, Inc.
Closes #15356
include/os/freebsd/spl/sys/taskq.h
module/os/freebsd/spl/spl_taskq.c