Read corruption possible during ldb_search

Andrew Bartlett abartlet at samba.org
Wed Apr 26 03:23:16 UTC 2017


On Wed, 2017-04-26 at 10:03 +1200, Garming Sam wrote:
> As far as I know, all the known deadlocks and data corruption should
> be
> fixed in this patchset.
> 
> What I think Andrew was trying to say was that there was no direct
> test
> of my patch ([PATCH 07/17] ldb_tdb: Ensure we correctly decrement
> ltdb->read_lock_count) which fixes the original read consistency
> issue
> we were attempting to resolve. Instead he wrote a cmocka test to show
> that separately (prior to that we only detected it through spurious
> deadlocks during make test).

Thanks.  That was the case last night, sadly in more autobuilds I'm
still seeing deadlock detected so I'm continuing to investigate. 

ldb: ltdb: tdb(/home/ubuntu/autobuild/b27129/samba/bin/ab/fl2008r2dc/private/sam.ldb): tdb_transaction_prepare_commit: failed to upgrade hash locks: Locking error

ldb: ltdb: tdb(/home/ubuntu/autobuild/b27129/samba/bin/ab/fl2008r2dc/private/sam.ldb): tdb_transaction_cancel: no transaction

ldb: dsdb_set_schema() failed: 51:Busy: Failure during tdb_transaction_prepare_commit(): Locking error -> Busy

I think we have this pattern:

(1) start search (allrecord read lock)
(1) transaction start (transaction read lock)
(2) transaction start (transaction read lock)
(1) traverse (requesting transaction write lock, then write locks)
(2) some operation (likely attempting to write new schema index list to
@INDEXLIST)
(2) transaction prepare commit (requesting all-record lock held by (1))
-> DEADLOCK detected, because the 

I'll write another cmocka test when I get a moment to prove it.  I
think the fix is to not request the transaction write lock in the
traverse.

Thanks,

Andrew Bartlett
-- 
Andrew Bartlett                       http://samba.org/~abartlet/
Authentication Developer, Samba Team  http://samba.org
Samba Developer, Catalyst IT          http://catalyst.net.nz/services/samba




More information about the samba-technical mailing list