zfs/include/os/freebsd/spl/sys
Mark Johnston fdcb79b52e
spl: Don't check FreeBSD rwlocks for double initialization (#13019)
This checking breaks KMSAN since it effectively loads from uninitialized
memory to see if the lock is already initialized.  This happens in
dnode_cons() for example.  This checking is not very useful, partly due
to UMA's memory trashing, and is already disabled for mutexes.  Make
mutexes and rwlocks consistent: remove double-initialization checking
for rwlocks, and pass SX_NEW to disable the same checking in
lock_init().

No functional change intended, this affects only debug builds.

As a side note, kmem cache constructors/destructors are implemented
suboptimally on FreeBSD.  FreeBSD's slab allocator, UMA, supports two
pairs of constructors/destructors: ctor/dtor and init/fini.  The former
are called upon every allocation and free of an item, while the latter
are called when an item is imported or released from a zone,
respectively.  That is, when a slab is allocated to a particular cache,
it is subdivided into items, and init is called on each.  fini is called
when the slab is being prepared to be freed back to the system.  The
intent is for them to initialize static fields such as locks, which
do not need to be initialized upon each allocation of an item.

In illumos, kmem_cache constructors/destructors correspond to UMA's
init/fini callbacks.  However, in the SPL they are implemented as UMA
ctor/dtors, meaning that they get called far more often than necessary.
This may be difficult to fix, since new code may assume the kmem cache
ctor/dtors are in fact called upon each allocation/free, and there
doesn't seem to be a clear way to implement the intended semantics on
Linux.

Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Mark Johnston <markj@FreeBSD.org>
Closes #13019
2022-01-31 10:58:45 -08:00
..
Makefile.am Introduce write-mostly sums 2021-05-27 14:27:29 -06:00
acl.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
acl_impl.h Remove pragma ident lines 2020-08-26 10:35:50 -07:00
atomic.h FreeBSD: make adjustments for the standalone environment 2020-10-13 21:05:49 -07:00
byteorder.h FreeBSD: make adjustments for the standalone environment 2020-10-13 21:05:49 -07:00
callb.h Fix typos 2020-06-09 21:24:09 -07:00
ccompat.h Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
ccompile.h Remove overlooked __sun_attr__ based macros 2021-07-27 09:49:11 -07:00
cmn_err.h Remove overlooked __sun_attr__ based macros 2021-07-27 09:49:11 -07:00
condvar.h FreeBSD: make adjustments for the standalone environment 2020-10-13 21:05:49 -07:00
cred.h FreeBSD: Define crgetzoneid appropriately 2020-08-31 19:42:26 -07:00
ctype.h Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
debug.h Replace *CTASSERT() with _Static_assert() 2022-01-26 11:38:52 -08:00
dirent.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
disp.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
dkio.h Remove unnecessary references to slavery 2020-06-10 17:07:59 -07:00
extdirent.h Remove pragma ident lines 2020-08-26 10:35:50 -07:00
fcntl.h FreeBSD: fix HEAD build, conditionally remove FDSYNC defines 2021-01-23 15:39:55 -08:00
file.h Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
freebsd_rwlock.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
idmap.h FreeBSD: Fix UNIX permissions checking 2020-08-18 09:57:07 -07:00
inttypes.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
isa_defs.h Prefix zfs internal endian checks with _ZFS 2020-07-28 13:02:49 -07:00
kidmap.h FreeBSD: Fix UNIX permissions checking 2020-08-18 09:57:07 -07:00
kmem.h FreeBSD: make adjustments for the standalone environment 2020-10-13 21:05:49 -07:00
kmem_cache.h FreeBSD: make adjustments for the standalone environment 2020-10-13 21:05:49 -07:00
kstat.h Remove pool io kstats (#12212) 2021-06-10 08:27:33 -07:00
list.h Remove pragma ident lines 2020-08-26 10:35:50 -07:00
list_impl.h Remove pragma ident lines 2020-08-26 10:35:50 -07:00
lock.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
misc.h Consolidate zfs_holey and zfs_access 2020-10-31 09:40:08 -07:00
mod_os.h Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
mode.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
mount.h freebsd: changes necessary to coexist with dtrace in tree 2020-07-01 09:10:08 -07:00
mutex.h FreeBSD: Don't require zeroing new locks before init 2020-06-13 10:58:10 -07:00
param.h Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
policy.h Share zfs_fsync, zfs_read, zfs_write, et al between Linux and FreeBSD 2020-10-21 14:08:06 -07:00
proc.h FreeBSD: make adjustments for the standalone environment 2020-10-13 21:05:49 -07:00
processor.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
procfs_list.h FreeBSD: make adjustments for the standalone environment 2020-10-13 21:05:49 -07:00
random.h FreeBSD: fix compilation of FreeBSD world after 29274c9f6 2021-06-25 10:28:51 -07:00
rwlock.h spl: Don't check FreeBSD rwlocks for double initialization (#13019) 2022-01-31 10:58:45 -08:00
sdt.h Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
sid.h FreeBSD: Fix UNIX permissions checking 2020-08-18 09:57:07 -07:00
sig.h FreeBSD: make adjustments for the standalone environment 2020-10-13 21:05:49 -07:00
simd.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
simd_x86.h FreeBSD: Sort out kernel FPU headers for 12.1-REL 2020-10-02 17:48:45 -07:00
spl_condvar.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
string.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
strings.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
sunddi.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
sysmacros.h Introduce CPU_SEQID_UNSTABLE 2020-11-02 11:51:12 -08:00
systeminfo.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
systm.h Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
taskq.h FreeBSD: make adjustments for the standalone environment 2020-10-13 21:05:49 -07:00
thread.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
time.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
timer.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
trace.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
trace_zfs.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
types.h Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
types32.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
uio.h Cleaning up uio headers 2021-02-20 20:16:50 -08:00
uuid.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
vfs.h Remove unimplemented virus scanning hooks 2021-05-10 22:02:25 -07:00
vm.h Use new FreeBSD API to largely eliminate object locking 2020-04-17 09:30:26 -07:00
vmsystm.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
vnode.h FreeBSD: Provide correct file generation number 2021-12-16 13:22:15 -08:00
vnode_impl.h Fix various typos 2021-04-02 18:52:15 -07:00
wmsum.h Introduce write-mostly sums 2021-05-27 14:27:29 -06:00
zmod.h Remove pragma ident lines 2020-08-26 10:35:50 -07:00
zone.h FreeBSD: Simplify INGLOBALZONE 2020-08-31 19:43:08 -07:00