[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Btrfs: make sure to unblock the transaction when cleaning it up



When a transaction aborts we can get stuck in places where tasks are waiting
for the transaction to become unblocked.  So we need to unblock the
transaction and wake up any waiters so they can exit properly.  Thanks,

Signed-off-by: Josef Bacik <josef@xxxxxxxxxx>
---
 fs/btrfs/transaction.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index 7aed0e8..1715afb 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -1204,9 +1204,16 @@ static void cleanup_transaction(struct btrfs_trans_handle *trans,
 	WARN_ON(trans->use_count > 1);
 
 	spin_lock(&root->fs_info->trans_lock);
+	cur_trans->blocked = 0;
 	list_del_init(&cur_trans->list);
+	if (root->fs_info->running_transaction == cur_trans) {
+		root->fs_info->running_transaction = NULL;
+		root->fs_info->trans_no_join = 0;
+	}
 	spin_unlock(&root->fs_info->trans_lock);
 
+	wake_up(&root->fs_info->transaction_wait);
+
 	btrfs_cleanup_one_transaction(trans->transaction, root);
 
 	put_transaction(cur_trans);
-- 
1.7.7.6

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Free Online Dating]     [Linux Kernel]     [Linux SCSI]     [XFree86]

Add to Google Powered by Linux