mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
Btrfs: call the qgroup accounting functions
Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
This commit is contained in:
parent
bed92eae26
commit
edf39272db
2 changed files with 17 additions and 0 deletions
|
@ -2479,6 +2479,8 @@ int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
|
|||
2 * 1024 * 1024, btrfs_get_alloc_profile(root, 0),
|
||||
CHUNK_ALLOC_NO_FORCE);
|
||||
|
||||
btrfs_delayed_refs_qgroup_accounting(trans, root->fs_info);
|
||||
|
||||
delayed_refs = &trans->transaction->delayed_refs;
|
||||
INIT_LIST_HEAD(&cluster);
|
||||
again:
|
||||
|
@ -2588,6 +2590,7 @@ int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
|
|||
}
|
||||
out:
|
||||
spin_unlock(&delayed_refs->lock);
|
||||
assert_qgroups_uptodate(trans);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -512,6 +512,11 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* do the qgroup accounting as early as possible
|
||||
*/
|
||||
err = btrfs_delayed_refs_qgroup_accounting(trans, info);
|
||||
|
||||
btrfs_trans_release_metadata(trans, root);
|
||||
trans->block_rsv = NULL;
|
||||
/*
|
||||
|
@ -571,6 +576,7 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
|
|||
root->fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR) {
|
||||
err = -EIO;
|
||||
}
|
||||
assert_qgroups_uptodate(trans);
|
||||
|
||||
memset(trans, 0, sizeof(*trans));
|
||||
kmem_cache_free(btrfs_trans_handle_cachep, trans);
|
||||
|
@ -1355,6 +1361,13 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
|
|||
if (ret)
|
||||
goto cleanup_transaction;
|
||||
|
||||
/*
|
||||
* running the delayed items may have added new refs. account
|
||||
* them now so that they hinder processing of more delayed refs
|
||||
* as little as possible.
|
||||
*/
|
||||
btrfs_delayed_refs_qgroup_accounting(trans, root->fs_info);
|
||||
|
||||
/*
|
||||
* rename don't use btrfs_join_transaction, so, once we
|
||||
* set the transaction to blocked above, we aren't going
|
||||
|
@ -1467,6 +1480,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
|
|||
root->fs_info->chunk_root->node);
|
||||
switch_commit_root(root->fs_info->chunk_root);
|
||||
|
||||
assert_qgroups_uptodate(trans);
|
||||
update_super_roots(root);
|
||||
|
||||
if (!root->fs_info->log_root_recovering) {
|
||||
|
|
Loading…
Reference in a new issue