Btrfs: stop waiting on current trans if we aborted
authorJosef Bacik <jbacik@fusionio.com>
Mon, 10 Jun 2013 20:47:23 +0000 (16:47 -0400)
committerJosef Bacik <jbacik@fusionio.com>
Mon, 1 Jul 2013 12:52:27 +0000 (08:52 -0400)
commit501407aab8c947911b10cf5a0e0043019d5a4f17
tree32bd0813ecea865ae52fbf969851cfe01292a593
parentf971fe29b14eedd4abc389593b77fbdf94ac2d59
Btrfs: stop waiting on current trans if we aborted

I hit a hang when run_delayed_refs returned an error in the beginning of
btrfs_commit_transaction.  If we decide we need to commit the transaction in
btrfs_end_transaction we'll set BLOCKED and start to commit, but if we get an
error this early on we'll just exit without committing.  This is fine, except
that anybody else who tried to start a transaction will sit in
wait_current_trans() since we're set to BLOCKED and we never set it to something
else and woke people up.  To fix this we want to check for trans->aborted
everywhere we wait for the transaction state to change, and make
btrfs_abort_transaction() wake up any waiters there may be.  All the callers
will notice that the transaction has aborted and exit out properly.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
fs/btrfs/super.c
fs/btrfs/transaction.c