Jan Schmidt d42244a0d3 Btrfs: resolve tree mod log locking issue in btrfs_next_leaf
With the tree mod log, we may end up with two roots (the current root and a
rewinded version of it) both pointing to two leaves, l1 and l2, of which l2
had already been cow-ed in the current transaction. If we don't rewind any
tree blocks, we cannot have two roots both pointing to an already cowed tree
block.

Now there is btrfs_next_leaf, which has a leaf locked and wants a lock on
the next (right) leaf. And there is push_leaf_left, which has a (cowed!)
leaf locked and wants a lock on the previous (left) leaf.

In order to solve this dead lock situation, we use try_lock in
btrfs_next_leaf (only in case it's called with a tree mod log time_seq
paramter) and if we fail to get a lock on the next leaf, we give up our lock
on the current leaf and retry from the very beginning.

Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
2012-06-27 16:34:40 +02:00
..
2012-03-28 09:58:38 -07:00
2012-04-23 18:22:42 -07:00
2012-03-31 16:03:16 -04:00
2012-04-23 19:52:00 -07:00
2012-03-21 10:15:51 -07:00
2012-04-13 13:50:52 -04:00
2012-03-20 21:29:52 -04:00
2012-03-20 21:29:38 -04:00
2012-03-30 17:31:56 -07:00
2012-03-23 09:27:40 -07:00
2012-03-28 15:58:21 -07:00
2012-04-21 01:58:20 -04:00
2012-03-20 21:29:46 -04:00
2012-03-20 21:29:46 -04:00
2012-01-03 22:52:39 -05:00
2012-03-28 10:07:27 -07:00
2012-03-20 21:29:51 -04:00
2012-03-20 21:29:38 -04:00