mirror_zfs/include
Brian Behlendorf ede0bdffb6 Treat mutex->owner as volatile
When HAVE_MUTEX_OWNER is defined and we are directly accessing
mutex->owner treat is as volative with the ACCESS_ONCE() helper.
Without this you may get a stale cached value when accessing it
from different cpus.  This can result in incorrect behavior from
mutex_owned() and mutex_owner().  This is not a problem for the
!HAVE_MUTEX_OWNER case because in this case all the accesses
are covered by a spin lock which similarly gaurentees we will
not be accessing stale data.

Secondly, check CONFIG_SMP before allowing access to mutex->owner.
I see that for non-SMP setups the kernel does not track the owner
so we cannot rely on it.

Thirdly, check CONFIG_MUTEX_DEBUG when this is defined and the
HAVE_MUTEX_OWNER is defined surprisingly the mutex->owner will
not be cleared on mutex_exit().  When this is the case the SPL
needs to make sure to do it to ensure MUTEX_HELD() behaves as
expected or you will certainly assert in mutex_destroy().

Finally, improve the mutex regression tests.  For mutex_owned() we
now minimally check that it behaves correctly when checked from the
owner thread or the non-owner thread.  This subtle behaviour has bit
me before and I'd like to catch it early next time if it reappears.

As for mutex_owned() regression test additonally verify that
mutex->owner is always cleared on mutex_exit().
2010-06-28 16:02:57 -07:00
..
fs Public Release Prep 2010-05-17 15:18:00 -07:00
linux Cleanly split Linux proc.h (fs) from conflicting Solaris proc.h (process) 2010-06-11 15:57:25 -07:00
rpc Public Release Prep 2010-05-17 15:18:00 -07:00
sharefs Public Release Prep 2010-05-17 15:18:00 -07:00
sys Treat mutex->owner as volatile 2010-06-28 16:02:57 -07:00
util Add missing header util/sscanf.h 2010-06-14 14:20:31 -07:00
vm Public Release Prep 2010-05-17 15:18:00 -07:00
.gitignore sun-misc-gitignore 2010-01-08 09:37:54 -08:00
Makefile.am Atomic64 compatibility for 32-bit systems without kernel support. 2009-12-04 15:54:12 -08:00
Makefile.in Refresh autogen.sh products with automake 1.11.1. 2010-05-21 15:52:06 -07:00
spl-ctl.h Public Release Prep 2010-05-17 15:18:00 -07:00
spl-device.h Public Release Prep 2010-05-17 15:18:00 -07:00
splat-ctl.h Public Release Prep 2010-05-17 15:18:00 -07:00
strings.h Public Release Prep 2010-05-17 15:18:00 -07:00
unistd.h Public Release Prep 2010-05-17 15:18:00 -07:00