diff options
author | Attilio Rao <attilio@FreeBSD.org> | 2008-02-13 20:44:19 +0000 |
---|---|---|
committer | Attilio Rao <attilio@FreeBSD.org> | 2008-02-13 20:44:19 +0000 |
commit | 84887fa3620e529b82b433f946a3af761d18e34d (patch) | |
tree | f2a3d841bf9f78f1adc2a1010a2a03d5cd5095ad /sys/sys/lock.h | |
parent | 89d1d7886a01eb41110be6a4f820fc9787f4b030 (diff) | |
download | src-84887fa3620e529b82b433f946a3af761d18e34d.tar.gz src-84887fa3620e529b82b433f946a3af761d18e34d.zip |
- Add real assertions to lockmgr locking primitives.
A couple of notes for this:
* WITNESS support, when enabled, is only used for shared locks in order
to avoid problems with the "disowned" locks
* KA_HELD and KA_UNHELD only exists in the lockmgr namespace in order
to assert for a generic thread (not curthread) owning or not the
lock. Really, this kind of check is bogus but it seems very
widespread in the consumers code. So, for the moment, we cater this
untrusted behaviour, until the consumers are not fixed and the
options could be removed (hopefully during 8.0-CURRENT lifecycle)
* Implementing KA_HELD and KA_UNHELD (not surported natively by
WITNESS) made necessary the introduction of LA_MASKASSERT which
specifies the range for default lock assertion flags
* About other aspects, lockmgr_assert() follows exactly what other
locking primitives offer about this operation.
- Build real assertions for buffer cache locks on the top of
lockmgr_assert(). They can be used with the BUF_ASSERT_*(bp)
paradigm.
- Add checks at lock destruction time and use a cookie for verifying
lock integrity at any operation.
- Redefine BUF_LOCKFREE() in order to not use a direct assert but
let it rely on the aforementioned destruction time check.
KPI results evidently broken, so __FreeBSD_version bumping and
manpage update result necessary and will be committed soon.
Side note: lockmgr_assert() will be used soon in order to implement
real assertions in the vnode namespace replacing the legacy and still
bogus "VOP_ISLOCKED()" way.
Tested by: kris (earlier version)
Reviewed by: jhb
Notes
Notes:
svn path=/head/; revision=176249
Diffstat (limited to 'sys/sys/lock.h')
-rw-r--r-- | sys/sys/lock.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/sys/lock.h b/sys/sys/lock.h index a70e0771a153..0b07159a1705 100644 --- a/sys/sys/lock.h +++ b/sys/sys/lock.h @@ -105,6 +105,7 @@ struct lock_class { #define LOP_DUPOK 0x00000010 /* Don't check for duplicate acquires */ /* Flags passed to witness_assert. */ +#define LA_MASKASSERT 0x000000ff /* Mask for witness defined asserts. */ #define LA_UNLOCKED 0x00000000 /* Lock is unlocked. */ #define LA_LOCKED 0x00000001 /* Lock is at least share locked. */ #define LA_SLOCKED 0x00000002 /* Lock is exactly share locked. */ |