Btrfs: reap dead roots right after commit
Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
committed by
David Woodhouse
parent
facda1e787
commit
ad693af684
@@ -371,13 +371,6 @@ void btrfs_transaction_cleaner(struct work_struct *work)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
INIT_LIST_HEAD(&dirty_roots);
|
INIT_LIST_HEAD(&dirty_roots);
|
||||||
mutex_lock(&root->fs_info->trans_mutex);
|
|
||||||
list_splice_init(&root->fs_info->dead_roots, &dirty_roots);
|
|
||||||
mutex_unlock(&root->fs_info->trans_mutex);
|
|
||||||
|
|
||||||
if (!list_empty(&dirty_roots)) {
|
|
||||||
drop_dirty_roots(root, &dirty_roots);
|
|
||||||
}
|
|
||||||
mutex_lock(&root->fs_info->fs_mutex);
|
mutex_lock(&root->fs_info->fs_mutex);
|
||||||
mutex_lock(&root->fs_info->trans_mutex);
|
mutex_lock(&root->fs_info->trans_mutex);
|
||||||
cur = root->fs_info->running_transaction;
|
cur = root->fs_info->running_transaction;
|
||||||
@@ -396,6 +389,14 @@ void btrfs_transaction_cleaner(struct work_struct *work)
|
|||||||
ret = btrfs_commit_transaction(trans, root);
|
ret = btrfs_commit_transaction(trans, root);
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&root->fs_info->fs_mutex);
|
mutex_unlock(&root->fs_info->fs_mutex);
|
||||||
|
|
||||||
|
mutex_lock(&root->fs_info->trans_mutex);
|
||||||
|
list_splice_init(&root->fs_info->dead_roots, &dirty_roots);
|
||||||
|
mutex_unlock(&root->fs_info->trans_mutex);
|
||||||
|
|
||||||
|
if (!list_empty(&dirty_roots)) {
|
||||||
|
drop_dirty_roots(root, &dirty_roots);
|
||||||
|
}
|
||||||
btrfs_transaction_queue_work(root, delay);
|
btrfs_transaction_queue_work(root, delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user