tdb: tdb_allrecord_lock/tdb_allrecord_unlock/tdb_allrecord_upgrade
authorRusty Russell <rusty@rustcorp.com.au>
Thu, 22 Apr 2010 04:24:05 +0000 (13:54 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Thu, 22 Apr 2010 04:24:05 +0000 (13:54 +0930)
commitd7fdb38ac05b5f2af9eb485e98673280835273dd
treec550268b786f1d6fe843504bc88bb4ab23f52109
parent7a99cdf5d0a91764a750c1a264e90e5b66f910a1
tdb: tdb_allrecord_lock/tdb_allrecord_unlock/tdb_allrecord_upgrade

Centralize locking of all chains of the tdb; rename _tdb_lockall to
tdb_allrecord_lock and _tdb_unlockall to tdb_allrecord_unlock, and
tdb_brlock_upgrade to tdb_allrecord_upgrade.

Then we use this in the transaction code.  Unfortunately, if the transaction
code records that it has grabbed the allrecord lock read-only, write locks
will fail, so we treat this upgradable lock as a write lock, and mark it
as upgradable using the otherwise-unused offset field.

One subtlety: now the transaction code is using the allrecord_lock, the
tdb_release_extra_locks() function drops it for us, so we no longer need
to do it manually in _tdb_transaction_cancel.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
(Imported from commit fca1621965c547e2d076eca2a2599e9629f91266)
lib/tdb/common/lock.c
lib/tdb/common/tdb_private.h
lib/tdb/common/transaction.c