summaryrefslogtreecommitdiff
path: root/fs/btrfs/transaction.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-01-08 15:46:30 -0500
committerChris Mason <chris.mason@oracle.com>2008-09-25 11:03:59 -0400
commite2008b61401ecb467a8ce1788fcd2116ae1cfbc1 (patch)
tree8f13935108abaca29c894ca1f9309c9813c9e194 /fs/btrfs/transaction.c
parent3063d29f2a4d4a4e9fa1ec77c124514f287c6da7 (diff)
downloadlwn-e2008b61401ecb467a8ce1788fcd2116ae1cfbc1.tar.gz
lwn-e2008b61401ecb467a8ce1788fcd2116ae1cfbc1.zip
Btrfs: Add some simple throttling to wait for data=ordered and snapshot deletion
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/transaction.c')
-rw-r--r--fs/btrfs/transaction.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index dc9865323e38..614903f5c884 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -424,6 +424,7 @@ static int drop_dirty_roots(struct btrfs_root *tree_root,
num_bytes = btrfs_root_used(&dirty->root->root_item);
root = dirty->latest_root;
+ root->fs_info->throttles++;
while(1) {
trans = btrfs_start_transaction(tree_root, 1);
@@ -447,6 +448,7 @@ static int drop_dirty_roots(struct btrfs_root *tree_root,
mutex_lock(&tree_root->fs_info->fs_mutex);
}
BUG_ON(ret);
+ root->fs_info->throttles--;
num_bytes -= btrfs_root_used(&dirty->root->root_item);
bytes_used = btrfs_root_used(&root->root_item);
@@ -484,6 +486,7 @@ int btrfs_write_ordered_inodes(struct btrfs_trans_handle *trans,
u64 objectid = 0;
int ret;
+ root->fs_info->throttles++;
while(1) {
ret = btrfs_find_first_ordered_inode(
&cur_trans->ordered_inode_tree,
@@ -523,6 +526,7 @@ int btrfs_write_ordered_inodes(struct btrfs_trans_handle *trans,
mutex_lock(&root->fs_info->fs_mutex);
mutex_lock(&root->fs_info->trans_mutex);
}
+ root->fs_info->throttles--;
return 0;
}