aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/transaction.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/transaction.c')
-rw-r--r--fs/btrfs/transaction.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index b859db395fd5..a2c5820f1d3d 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -371,13 +371,6 @@ void btrfs_transaction_cleaner(struct work_struct *work)
371 int ret; 371 int ret;
372 372
373 INIT_LIST_HEAD(&dirty_roots); 373 INIT_LIST_HEAD(&dirty_roots);
374 mutex_lock(&root->fs_info->trans_mutex);
375 list_splice_init(&root->fs_info->dead_roots, &dirty_roots);
376 mutex_unlock(&root->fs_info->trans_mutex);
377
378 if (!list_empty(&dirty_roots)) {
379 drop_dirty_roots(root, &dirty_roots);
380 }
381 mutex_lock(&root->fs_info->fs_mutex); 374 mutex_lock(&root->fs_info->fs_mutex);
382 mutex_lock(&root->fs_info->trans_mutex); 375 mutex_lock(&root->fs_info->trans_mutex);
383 cur = root->fs_info->running_transaction; 376 cur = root->fs_info->running_transaction;
@@ -396,6 +389,14 @@ void btrfs_transaction_cleaner(struct work_struct *work)
396 ret = btrfs_commit_transaction(trans, root); 389 ret = btrfs_commit_transaction(trans, root);
397out: 390out:
398 mutex_unlock(&root->fs_info->fs_mutex); 391 mutex_unlock(&root->fs_info->fs_mutex);
392
393 mutex_lock(&root->fs_info->trans_mutex);
394 list_splice_init(&root->fs_info->dead_roots, &dirty_roots);
395 mutex_unlock(&root->fs_info->trans_mutex);
396
397 if (!list_empty(&dirty_roots)) {
398 drop_dirty_roots(root, &dirty_roots);
399 }
399 btrfs_transaction_queue_work(root, delay); 400 btrfs_transaction_queue_work(root, delay);
400} 401}
401 402