- for (i = tdb_find_nonzero_off(tdb, hash_off(tdb, 0), num);
- i != num && !finish;
- i += tdb_find_nonzero_off(tdb, hash_off(tdb, i), num - i)) {
- if (tdb_lock_list(tdb, i, ltype, TDB_LOCK_WAIT) != i)
- goto fail;
-
- off = tdb_read_off(tdb, hash_off(tdb, i));
- if (off == TDB_OFF_ERR) {
- tdb_unlock_list(tdb, i, ltype);
- goto fail;
- }
-
- /* This race can happen, but look again. */
- if (off == 0) {
- tdb_unlock_list(tdb, i, ltype);
- continue;
- }
+ if (tdb->flags & TDB_VERSION1) {
+ count = tdb1_traverse(tdb, fn, p);
+ if (count == -1)
+ return TDB_ERR_TO_OFF(tdb->last_error);
+ return count;
+ }