summaryrefslogtreecommitdiff
path: root/fs/btrfs/transaction.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2012-01-06 15:23:57 -0500
committerChris Mason <chris.mason@oracle.com>2012-01-06 15:23:57 -0500
commit203bf287cb01a5dc26c20bd3737cecf3aeba1d48 (patch)
treef9ce9d7c82360bd6059b5ef16166cf79d16b1380 /fs/btrfs/transaction.c
parentc1111b1fcee6359922ad8e5f6d72ed43815ad8f9 (diff)
downloadlinux-3.10-203bf287cb01a5dc26c20bd3737cecf3aeba1d48.tar.gz
linux-3.10-203bf287cb01a5dc26c20bd3737cecf3aeba1d48.tar.bz2
linux-3.10-203bf287cb01a5dc26c20bd3737cecf3aeba1d48.zip
Btrfs: run chunk allocations while we do delayed refs
Btrfs tries to batch extent allocation tree changes to improve performance and reduce metadata trashing. But it doesn't allocate new metadata chunks while it is doing allocations for the extent allocation tree. This commit changes the delayed refence code to do chunk allocations if we're getting low on room. It prevents crashes and improves performance. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/transaction.c')
-rw-r--r--fs/btrfs/transaction.c9
1 files changed, 1 insertions, 8 deletions
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index 81376d94cd3..360c2dfd1ee 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -467,19 +467,12 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
btrfs_trans_release_metadata(trans, root);
trans->block_rsv = NULL;
- while (count < 4) {
+ while (count < 2) {
unsigned long cur = trans->delayed_ref_updates;
trans->delayed_ref_updates = 0;
if (cur &&
trans->transaction->delayed_refs.num_heads_ready > 64) {
trans->delayed_ref_updates = 0;
-
- /*
- * do a full flush if the transaction is trying
- * to close
- */
- if (trans->transaction->delayed_refs.flushing)
- cur = 0;
btrfs_run_delayed_refs(trans, root, cur);
} else {
break;