X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Flock.c;h=2b00584580810ad9aca0ae24dd6f880bd58d0796;hb=2c56e4d9ec516aceb9c5b26ceebd6d99361855c5;hp=3230b25e383d3b2a3ead9a1ac7ca156b4030f303;hpb=4916bc0a12ede1bf81c6895be9e7df39199f3290;p=ccan diff --git a/ccan/tdb2/lock.c b/ccan/tdb2/lock.c index 3230b25e..2b005845 100644 --- a/ccan/tdb2/lock.c +++ b/ccan/tdb2/lock.c @@ -485,8 +485,8 @@ int tdb_allrecord_lock(struct tdb_context *tdb, int ltype, /* Lock all the hash buckets. */ again: hash_size = (1ULL << tdb->header.v.hash_bits); - if (tdb_lock_gradual(tdb, ltype, TDB_HASH_LOCK_START, - 1ULL << tdb->header.v.hash_bits, flags)) { + if (tdb_lock_gradual(tdb, ltype, flags, TDB_HASH_LOCK_START, + hash_size)) { if (!(flags & TDB_LOCK_PROBE)) { tdb->log(tdb, TDB_DEBUG_ERROR, tdb->log_priv, "tdb_lockall hashes failed (%s)\n", @@ -665,6 +665,8 @@ again: int tdb_unlock_list(struct tdb_context *tdb, tdb_off_t list, int ltype) { + list &= ((1ULL << tdb->header.v.hash_bits) - 1); + /* a allrecord lock allows us to avoid per chain locks */ if (tdb->allrecord_lock.count) { if (tdb->allrecord_lock.ltype == F_RDLCK