]> git.baikalelectronics.ru Git - kernel.git/commit
Btrfs: set no_trans_join after trying to expand the transaction
authorJosef Bacik <josef@redhat.com>
Tue, 14 Jun 2011 20:22:15 +0000 (16:22 -0400)
committerJosef Bacik <josef@redhat.com>
Wed, 15 Jun 2011 17:24:47 +0000 (13:24 -0400)
commit1e668c388548232672cbb0f6a63a75db828a2229
tree22f9a66f0f99770edb483963ff308982424f2e53
parent1e4a1a60b667ada48ce6498d66bf30a7354473d9
Btrfs: set no_trans_join after trying to expand the transaction

We can lockup if we try to allow new writers join the transaction and we have
flushoncommit set or have a pending snapshot.  This is because we set
no_trans_join and then loop around and try to wait for ordered extents again.
The problem is the ordered endio stuff needs to join the transaction, which it
can't do because no_trans_join is set.  So instead wait until after this loop to
set no_trans_join and then make sure to wait for num_writers == 1 in case
anybody got started in between us exiting the loop and setting no_trans_join.
This could easily be reproduced by mounting -o flushoncommit and running xfstest
13.  It cannot be reproduced with this patch.  Thanks,

Reported-by: Jim Schutt <jaschut@sandia.gov>
Signed-off-by: Josef Bacik <josef@redhat.com>
fs/btrfs/transaction.c