tdb: cleanup: always grab allrecord lock to infinity.
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)
We were previously inconsistent with our "global" lock: the
transaction code grabbed it from FREELIST_TOP to end of file, and the
rest of the code grabbed it from FREELIST_TOP to end of the hash
chains.  Change it to always grab to end of file for simplicity and
so we can merge the two.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
(Imported from commit 9341f230f8968b4b18e451d15dda5ccbe7787768)

lib/tdb/common/lock.c

index 73d34417e727196b56c1787f2b84bfc97a618d4e..b1153b2e6f72b20f81e65f135d1d56f051036727 100644 (file)
@@ -449,9 +449,7 @@ static int _tdb_lockall(struct tdb_context *tdb, int ltype,
                return -1;
        }
 
-       if (tdb->methods->brlock(tdb, ltype,
-                                FREELIST_TOP, 4*tdb->header.hash_size,
-                                flags)) {
+       if (tdb->methods->brlock(tdb, ltype, FREELIST_TOP, 0, flags)) {
                if (flags & TDB_LOCK_WAIT) {
                        TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_lockall failed (%s)\n", strerror(errno)));
                }
@@ -486,8 +484,7 @@ static int _tdb_unlockall(struct tdb_context *tdb, int ltype, bool mark_lock)
        }
 
        if (!mark_lock &&
-           tdb->methods->brunlock(tdb, ltype,
-                                  FREELIST_TOP, 4*tdb->header.hash_size)) {
+           tdb->methods->brunlock(tdb, ltype, FREELIST_TOP, 0)) {
                TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_unlockall failed (%s)\n", strerror(errno)));
                return -1;
        }
@@ -688,8 +685,7 @@ void tdb_release_extra_locks(struct tdb_context *tdb)
        unsigned int i, extra = 0;
 
        if (tdb->allrecord_lock.count != 0) {
-               tdb_brunlock(tdb, tdb->allrecord_lock.ltype,
-                            FREELIST_TOP, 4*tdb->header.hash_size);
+               tdb_brunlock(tdb, tdb->allrecord_lock.ltype, FREELIST_TOP, 0);
                tdb->allrecord_lock.count = 0;
        }