diff options
author | Liu Bo <bo.li.liu@oracle.com> | 2012-11-14 09:34:34 -0500 |
---|---|---|
committer | Josef Bacik <jbacik@fusionio.com> | 2012-12-12 17:15:28 -0500 |
commit | b53d3f5db2b79637acadc06a330db6c2c60863f5 (patch) | |
tree | f5ad7a1612f413e1ae459eb88d20642972d6b02c /fs | |
parent | 3ef5969cd8a42a78ccdbc53f7abb2e6136b2ec65 (diff) |
Btrfs: cleanup for btrfs_btree_balance_dirty
- 'nr' is no more used.
- btrfs_btree_balance_dirty() and __btrfs_btree_balance_dirty() can share
a bunch of code.
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/delayed-inode.c | 5 | ||||
-rw-r--r-- | fs/btrfs/disk-io.c | 29 | ||||
-rw-r--r-- | fs/btrfs/disk-io.h | 4 | ||||
-rw-r--r-- | fs/btrfs/file.c | 9 | ||||
-rw-r--r-- | fs/btrfs/inode.c | 42 | ||||
-rw-r--r-- | fs/btrfs/relocation.c | 22 | ||||
-rw-r--r-- | fs/btrfs/transaction.c | 4 |
7 files changed, 34 insertions, 81 deletions
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index 0c6dca550ea1..34836036f01b 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c | |||
@@ -1257,7 +1257,6 @@ static void btrfs_async_run_delayed_node_done(struct btrfs_work *work) | |||
1257 | struct btrfs_delayed_node *delayed_node = NULL; | 1257 | struct btrfs_delayed_node *delayed_node = NULL; |
1258 | struct btrfs_root *root; | 1258 | struct btrfs_root *root; |
1259 | struct btrfs_block_rsv *block_rsv; | 1259 | struct btrfs_block_rsv *block_rsv; |
1260 | unsigned long nr = 0; | ||
1261 | int need_requeue = 0; | 1260 | int need_requeue = 0; |
1262 | int ret; | 1261 | int ret; |
1263 | 1262 | ||
@@ -1318,11 +1317,9 @@ static void btrfs_async_run_delayed_node_done(struct btrfs_work *work) | |||
1318 | delayed_node); | 1317 | delayed_node); |
1319 | mutex_unlock(&delayed_node->mutex); | 1318 | mutex_unlock(&delayed_node->mutex); |
1320 | 1319 | ||
1321 | nr = trans->blocks_used; | ||
1322 | |||
1323 | trans->block_rsv = block_rsv; | 1320 | trans->block_rsv = block_rsv; |
1324 | btrfs_end_transaction_dmeta(trans, root); | 1321 | btrfs_end_transaction_dmeta(trans, root); |
1325 | __btrfs_btree_balance_dirty(root, nr); | 1322 | btrfs_btree_balance_dirty_nodelay(root); |
1326 | free_path: | 1323 | free_path: |
1327 | btrfs_free_path(path); | 1324 | btrfs_free_path(path); |
1328 | out: | 1325 | out: |
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 07a2162cdd65..ff5d259ac275 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -3411,7 +3411,8 @@ void btrfs_mark_buffer_dirty(struct extent_buffer *buf) | |||
3411 | } | 3411 | } |
3412 | } | 3412 | } |
3413 | 3413 | ||
3414 | void btrfs_btree_balance_dirty(struct btrfs_root *root, unsigned long nr) | 3414 | static void __btrfs_btree_balance_dirty(struct btrfs_root *root, |
3415 | int flush_delayed) | ||
3415 | { | 3416 | { |
3416 | /* | 3417 | /* |
3417 | * looks as though older kernels can get into trouble with | 3418 | * looks as though older kernels can get into trouble with |
@@ -3423,7 +3424,8 @@ void btrfs_btree_balance_dirty(struct btrfs_root *root, unsigned long nr) | |||
3423 | if (current->flags & PF_MEMALLOC) | 3424 | if (current->flags & PF_MEMALLOC) |
3424 | return; | 3425 | return; |
3425 | 3426 | ||
3426 | btrfs_balance_delayed_items(root); | 3427 | if (flush_delayed) |
3428 | btrfs_balance_delayed_items(root); | ||
3427 | 3429 | ||
3428 | num_dirty = root->fs_info->dirty_metadata_bytes; | 3430 | num_dirty = root->fs_info->dirty_metadata_bytes; |
3429 | 3431 | ||
@@ -3434,25 +3436,14 @@ void btrfs_btree_balance_dirty(struct btrfs_root *root, unsigned long nr) | |||
3434 | return; | 3436 | return; |
3435 | } | 3437 | } |
3436 | 3438 | ||
3437 | void __btrfs_btree_balance_dirty(struct btrfs_root *root, unsigned long nr) | 3439 | void btrfs_btree_balance_dirty(struct btrfs_root *root) |
3438 | { | 3440 | { |
3439 | /* | 3441 | __btrfs_btree_balance_dirty(root, 1); |
3440 | * looks as though older kernels can get into trouble with | 3442 | } |
3441 | * this code, they end up stuck in balance_dirty_pages forever | ||
3442 | */ | ||
3443 | u64 num_dirty; | ||
3444 | unsigned long thresh = 32 * 1024 * 1024; | ||
3445 | |||
3446 | if (current->flags & PF_MEMALLOC) | ||
3447 | return; | ||
3448 | |||
3449 | num_dirty = root->fs_info->dirty_metadata_bytes; | ||
3450 | 3443 | ||
3451 | if (num_dirty > thresh) { | 3444 | void btrfs_btree_balance_dirty_nodelay(struct btrfs_root *root) |
3452 | balance_dirty_pages_ratelimited_nr( | 3445 | { |
3453 | root->fs_info->btree_inode->i_mapping, 1); | 3446 | __btrfs_btree_balance_dirty(root, 0); |
3454 | } | ||
3455 | return; | ||
3456 | } | 3447 | } |
3457 | 3448 | ||
3458 | int btrfs_read_buffer(struct extent_buffer *buf, u64 parent_transid) | 3449 | int btrfs_read_buffer(struct extent_buffer *buf, u64 parent_transid) |
diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 2025a9132c16..305c33efb0e3 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h | |||
@@ -62,8 +62,8 @@ struct btrfs_root *btrfs_read_fs_root_no_radix(struct btrfs_root *tree_root, | |||
62 | struct btrfs_root *btrfs_read_fs_root_no_name(struct btrfs_fs_info *fs_info, | 62 | struct btrfs_root *btrfs_read_fs_root_no_name(struct btrfs_fs_info *fs_info, |
63 | struct btrfs_key *location); | 63 | struct btrfs_key *location); |
64 | int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info); | 64 | int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info); |
65 | void btrfs_btree_balance_dirty(struct btrfs_root *root, unsigned long nr); | 65 | void btrfs_btree_balance_dirty(struct btrfs_root *root); |
66 | void __btrfs_btree_balance_dirty(struct btrfs_root *root, unsigned long nr); | 66 | void btrfs_btree_balance_dirty_nodelay(struct btrfs_root *root); |
67 | void btrfs_free_fs_root(struct btrfs_fs_info *fs_info, struct btrfs_root *root); | 67 | void btrfs_free_fs_root(struct btrfs_fs_info *fs_info, struct btrfs_root *root); |
68 | void btrfs_mark_buffer_dirty(struct extent_buffer *buf); | 68 | void btrfs_mark_buffer_dirty(struct extent_buffer *buf); |
69 | int btrfs_buffer_uptodate(struct extent_buffer *buf, u64 parent_transid, | 69 | int btrfs_buffer_uptodate(struct extent_buffer *buf, u64 parent_transid, |
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 883cf826cf25..bd7f1b01e051 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -1349,7 +1349,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file, | |||
1349 | balance_dirty_pages_ratelimited_nr(inode->i_mapping, | 1349 | balance_dirty_pages_ratelimited_nr(inode->i_mapping, |
1350 | dirty_pages); | 1350 | dirty_pages); |
1351 | if (dirty_pages < (root->leafsize >> PAGE_CACHE_SHIFT) + 1) | 1351 | if (dirty_pages < (root->leafsize >> PAGE_CACHE_SHIFT) + 1) |
1352 | btrfs_btree_balance_dirty(root, 1); | 1352 | btrfs_btree_balance_dirty(root); |
1353 | 1353 | ||
1354 | pos += copied; | 1354 | pos += copied; |
1355 | num_written += copied; | 1355 | num_written += copied; |
@@ -1803,7 +1803,6 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len) | |||
1803 | u64 cur_offset = lockstart; | 1803 | u64 cur_offset = lockstart; |
1804 | u64 min_size = btrfs_calc_trunc_metadata_size(root, 1); | 1804 | u64 min_size = btrfs_calc_trunc_metadata_size(root, 1); |
1805 | u64 drop_end; | 1805 | u64 drop_end; |
1806 | unsigned long nr; | ||
1807 | int ret = 0; | 1806 | int ret = 0; |
1808 | int err = 0; | 1807 | int err = 0; |
1809 | bool same_page = (offset >> PAGE_CACHE_SHIFT) == | 1808 | bool same_page = (offset >> PAGE_CACHE_SHIFT) == |
@@ -1931,9 +1930,8 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len) | |||
1931 | break; | 1930 | break; |
1932 | } | 1931 | } |
1933 | 1932 | ||
1934 | nr = trans->blocks_used; | ||
1935 | btrfs_end_transaction(trans, root); | 1933 | btrfs_end_transaction(trans, root); |
1936 | btrfs_btree_balance_dirty(root, nr); | 1934 | btrfs_btree_balance_dirty(root); |
1937 | 1935 | ||
1938 | trans = btrfs_start_transaction(root, 3); | 1936 | trans = btrfs_start_transaction(root, 3); |
1939 | if (IS_ERR(trans)) { | 1937 | if (IS_ERR(trans)) { |
@@ -1969,9 +1967,8 @@ out_trans: | |||
1969 | 1967 | ||
1970 | trans->block_rsv = &root->fs_info->trans_block_rsv; | 1968 | trans->block_rsv = &root->fs_info->trans_block_rsv; |
1971 | ret = btrfs_update_inode(trans, root, inode); | 1969 | ret = btrfs_update_inode(trans, root, inode); |
1972 | nr = trans->blocks_used; | ||
1973 | btrfs_end_transaction(trans, root); | 1970 | btrfs_end_transaction(trans, root); |
1974 | btrfs_btree_balance_dirty(root, nr); | 1971 | btrfs_btree_balance_dirty(root); |
1975 | out_free: | 1972 | out_free: |
1976 | btrfs_free_path(path); | 1973 | btrfs_free_path(path); |
1977 | btrfs_free_block_rsv(root, rsv); | 1974 | btrfs_free_block_rsv(root, rsv); |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index e8733fab2739..aabf747d056e 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -3091,7 +3091,6 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry) | |||
3091 | struct btrfs_trans_handle *trans; | 3091 | struct btrfs_trans_handle *trans; |
3092 | struct inode *inode = dentry->d_inode; | 3092 | struct inode *inode = dentry->d_inode; |
3093 | int ret; | 3093 | int ret; |
3094 | unsigned long nr = 0; | ||
3095 | 3094 | ||
3096 | trans = __unlink_start_trans(dir, dentry); | 3095 | trans = __unlink_start_trans(dir, dentry); |
3097 | if (IS_ERR(trans)) | 3096 | if (IS_ERR(trans)) |
@@ -3111,9 +3110,8 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry) | |||
3111 | } | 3110 | } |
3112 | 3111 | ||
3113 | out: | 3112 | out: |
3114 | nr = trans->blocks_used; | ||
3115 | __unlink_end_trans(trans, root); | 3113 | __unlink_end_trans(trans, root); |
3116 | btrfs_btree_balance_dirty(root, nr); | 3114 | btrfs_btree_balance_dirty(root); |
3117 | return ret; | 3115 | return ret; |
3118 | } | 3116 | } |
3119 | 3117 | ||
@@ -3203,7 +3201,6 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
3203 | int err = 0; | 3201 | int err = 0; |
3204 | struct btrfs_root *root = BTRFS_I(dir)->root; | 3202 | struct btrfs_root *root = BTRFS_I(dir)->root; |
3205 | struct btrfs_trans_handle *trans; | 3203 | struct btrfs_trans_handle *trans; |
3206 | unsigned long nr = 0; | ||
3207 | 3204 | ||
3208 | if (inode->i_size > BTRFS_EMPTY_DIR_SIZE) | 3205 | if (inode->i_size > BTRFS_EMPTY_DIR_SIZE) |
3209 | return -ENOTEMPTY; | 3206 | return -ENOTEMPTY; |
@@ -3232,9 +3229,8 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
3232 | if (!err) | 3229 | if (!err) |
3233 | btrfs_i_size_write(inode, 0); | 3230 | btrfs_i_size_write(inode, 0); |
3234 | out: | 3231 | out: |
3235 | nr = trans->blocks_used; | ||
3236 | __unlink_end_trans(trans, root); | 3232 | __unlink_end_trans(trans, root); |
3237 | btrfs_btree_balance_dirty(root, nr); | 3233 | btrfs_btree_balance_dirty(root); |
3238 | 3234 | ||
3239 | return err; | 3235 | return err; |
3240 | } | 3236 | } |
@@ -3800,7 +3796,6 @@ void btrfs_evict_inode(struct inode *inode) | |||
3800 | struct btrfs_root *root = BTRFS_I(inode)->root; | 3796 | struct btrfs_root *root = BTRFS_I(inode)->root; |
3801 | struct btrfs_block_rsv *rsv, *global_rsv; | 3797 | struct btrfs_block_rsv *rsv, *global_rsv; |
3802 | u64 min_size = btrfs_calc_trunc_metadata_size(root, 1); | 3798 | u64 min_size = btrfs_calc_trunc_metadata_size(root, 1); |
3803 | unsigned long nr; | ||
3804 | int ret; | 3799 | int ret; |
3805 | 3800 | ||
3806 | trace_btrfs_inode_evict(inode); | 3801 | trace_btrfs_inode_evict(inode); |
@@ -3882,10 +3877,9 @@ void btrfs_evict_inode(struct inode *inode) | |||
3882 | ret = btrfs_update_inode(trans, root, inode); | 3877 | ret = btrfs_update_inode(trans, root, inode); |
3883 | BUG_ON(ret); | 3878 | BUG_ON(ret); |
3884 | 3879 | ||
3885 | nr = trans->blocks_used; | ||
3886 | btrfs_end_transaction(trans, root); | 3880 | btrfs_end_transaction(trans, root); |
3887 | trans = NULL; | 3881 | trans = NULL; |
3888 | btrfs_btree_balance_dirty(root, nr); | 3882 | btrfs_btree_balance_dirty(root); |
3889 | } | 3883 | } |
3890 | 3884 | ||
3891 | btrfs_free_block_rsv(root, rsv); | 3885 | btrfs_free_block_rsv(root, rsv); |
@@ -3901,9 +3895,8 @@ void btrfs_evict_inode(struct inode *inode) | |||
3901 | root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)) | 3895 | root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)) |
3902 | btrfs_return_ino(root, btrfs_ino(inode)); | 3896 | btrfs_return_ino(root, btrfs_ino(inode)); |
3903 | 3897 | ||
3904 | nr = trans->blocks_used; | ||
3905 | btrfs_end_transaction(trans, root); | 3898 | btrfs_end_transaction(trans, root); |
3906 | btrfs_btree_balance_dirty(root, nr); | 3899 | btrfs_btree_balance_dirty(root); |
3907 | no_delete: | 3900 | no_delete: |
3908 | clear_inode(inode); | 3901 | clear_inode(inode); |
3909 | return; | 3902 | return; |
@@ -4915,7 +4908,6 @@ static int btrfs_mknod(struct inode *dir, struct dentry *dentry, | |||
4915 | int err; | 4908 | int err; |
4916 | int drop_inode = 0; | 4909 | int drop_inode = 0; |
4917 | u64 objectid; | 4910 | u64 objectid; |
4918 | unsigned long nr = 0; | ||
4919 | u64 index = 0; | 4911 | u64 index = 0; |
4920 | 4912 | ||
4921 | if (!new_valid_dev(rdev)) | 4913 | if (!new_valid_dev(rdev)) |
@@ -4965,9 +4957,8 @@ static int btrfs_mknod(struct inode *dir, struct dentry *dentry, | |||
4965 | d_instantiate(dentry, inode); | 4957 | d_instantiate(dentry, inode); |
4966 | } | 4958 | } |
4967 | out_unlock: | 4959 | out_unlock: |
4968 | nr = trans->blocks_used; | ||
4969 | btrfs_end_transaction(trans, root); | 4960 | btrfs_end_transaction(trans, root); |
4970 | btrfs_btree_balance_dirty(root, nr); | 4961 | btrfs_btree_balance_dirty(root); |
4971 | if (drop_inode) { | 4962 | if (drop_inode) { |
4972 | inode_dec_link_count(inode); | 4963 | inode_dec_link_count(inode); |
4973 | iput(inode); | 4964 | iput(inode); |
@@ -4983,7 +4974,6 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry, | |||
4983 | struct inode *inode = NULL; | 4974 | struct inode *inode = NULL; |
4984 | int drop_inode = 0; | 4975 | int drop_inode = 0; |
4985 | int err; | 4976 | int err; |
4986 | unsigned long nr = 0; | ||
4987 | u64 objectid; | 4977 | u64 objectid; |
4988 | u64 index = 0; | 4978 | u64 index = 0; |
4989 | 4979 | ||
@@ -5033,13 +5023,12 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry, | |||
5033 | d_instantiate(dentry, inode); | 5023 | d_instantiate(dentry, inode); |
5034 | } | 5024 | } |
5035 | out_unlock: | 5025 | out_unlock: |
5036 | nr = trans->blocks_used; | ||
5037 | btrfs_end_transaction(trans, root); | 5026 | btrfs_end_transaction(trans, root); |
5038 | if (drop_inode) { | 5027 | if (drop_inode) { |
5039 | inode_dec_link_count(inode); | 5028 | inode_dec_link_count(inode); |
5040 | iput(inode); | 5029 | iput(inode); |
5041 | } | 5030 | } |
5042 | btrfs_btree_balance_dirty(root, nr); | 5031 | btrfs_btree_balance_dirty(root); |
5043 | return err; | 5032 | return err; |
5044 | } | 5033 | } |
5045 | 5034 | ||
@@ -5050,7 +5039,6 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir, | |||
5050 | struct btrfs_root *root = BTRFS_I(dir)->root; | 5039 | struct btrfs_root *root = BTRFS_I(dir)->root; |
5051 | struct inode *inode = old_dentry->d_inode; | 5040 | struct inode *inode = old_dentry->d_inode; |
5052 | u64 index; | 5041 | u64 index; |
5053 | unsigned long nr = 0; | ||
5054 | int err; | 5042 | int err; |
5055 | int drop_inode = 0; | 5043 | int drop_inode = 0; |
5056 | 5044 | ||
@@ -5094,14 +5082,13 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir, | |||
5094 | btrfs_log_new_name(trans, inode, NULL, parent); | 5082 | btrfs_log_new_name(trans, inode, NULL, parent); |
5095 | } | 5083 | } |
5096 | 5084 | ||
5097 | nr = trans->blocks_used; | ||
5098 | btrfs_end_transaction(trans, root); | 5085 | btrfs_end_transaction(trans, root); |
5099 | fail: | 5086 | fail: |
5100 | if (drop_inode) { | 5087 | if (drop_inode) { |
5101 | inode_dec_link_count(inode); | 5088 | inode_dec_link_count(inode); |
5102 | iput(inode); | 5089 | iput(inode); |
5103 | } | 5090 | } |
5104 | btrfs_btree_balance_dirty(root, nr); | 5091 | btrfs_btree_balance_dirty(root); |
5105 | return err; | 5092 | return err; |
5106 | } | 5093 | } |
5107 | 5094 | ||
@@ -5114,7 +5101,6 @@ static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) | |||
5114 | int drop_on_err = 0; | 5101 | int drop_on_err = 0; |
5115 | u64 objectid = 0; | 5102 | u64 objectid = 0; |
5116 | u64 index = 0; | 5103 | u64 index = 0; |
5117 | unsigned long nr = 1; | ||
5118 | 5104 | ||
5119 | /* | 5105 | /* |
5120 | * 2 items for inode and ref | 5106 | * 2 items for inode and ref |
@@ -5160,11 +5146,10 @@ static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) | |||
5160 | drop_on_err = 0; | 5146 | drop_on_err = 0; |
5161 | 5147 | ||
5162 | out_fail: | 5148 | out_fail: |
5163 | nr = trans->blocks_used; | ||
5164 | btrfs_end_transaction(trans, root); | 5149 | btrfs_end_transaction(trans, root); |
5165 | if (drop_on_err) | 5150 | if (drop_on_err) |
5166 | iput(inode); | 5151 | iput(inode); |
5167 | btrfs_btree_balance_dirty(root, nr); | 5152 | btrfs_btree_balance_dirty(root); |
5168 | return err; | 5153 | return err; |
5169 | } | 5154 | } |
5170 | 5155 | ||
@@ -6872,7 +6857,6 @@ static int btrfs_truncate(struct inode *inode) | |||
6872 | int ret; | 6857 | int ret; |
6873 | int err = 0; | 6858 | int err = 0; |
6874 | struct btrfs_trans_handle *trans; | 6859 | struct btrfs_trans_handle *trans; |
6875 | unsigned long nr; | ||
6876 | u64 mask = root->sectorsize - 1; | 6860 | u64 mask = root->sectorsize - 1; |
6877 | u64 min_size = btrfs_calc_trunc_metadata_size(root, 1); | 6861 | u64 min_size = btrfs_calc_trunc_metadata_size(root, 1); |
6878 | 6862 | ||
@@ -6995,9 +6979,8 @@ static int btrfs_truncate(struct inode *inode) | |||
6995 | break; | 6979 | break; |
6996 | } | 6980 | } |
6997 | 6981 | ||
6998 | nr = trans->blocks_used; | ||
6999 | btrfs_end_transaction(trans, root); | 6982 | btrfs_end_transaction(trans, root); |
7000 | btrfs_btree_balance_dirty(root, nr); | 6983 | btrfs_btree_balance_dirty(root); |
7001 | 6984 | ||
7002 | trans = btrfs_start_transaction(root, 2); | 6985 | trans = btrfs_start_transaction(root, 2); |
7003 | if (IS_ERR(trans)) { | 6986 | if (IS_ERR(trans)) { |
@@ -7031,9 +7014,8 @@ static int btrfs_truncate(struct inode *inode) | |||
7031 | if (ret && !err) | 7014 | if (ret && !err) |
7032 | err = ret; | 7015 | err = ret; |
7033 | 7016 | ||
7034 | nr = trans->blocks_used; | ||
7035 | ret = btrfs_end_transaction(trans, root); | 7017 | ret = btrfs_end_transaction(trans, root); |
7036 | btrfs_btree_balance_dirty(root, nr); | 7018 | btrfs_btree_balance_dirty(root); |
7037 | } | 7019 | } |
7038 | 7020 | ||
7039 | out: | 7021 | out: |
@@ -7594,7 +7576,6 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry, | |||
7594 | unsigned long ptr; | 7576 | unsigned long ptr; |
7595 | struct btrfs_file_extent_item *ei; | 7577 | struct btrfs_file_extent_item *ei; |
7596 | struct extent_buffer *leaf; | 7578 | struct extent_buffer *leaf; |
7597 | unsigned long nr = 0; | ||
7598 | 7579 | ||
7599 | name_len = strlen(symname) + 1; | 7580 | name_len = strlen(symname) + 1; |
7600 | if (name_len > BTRFS_MAX_INLINE_DATA_SIZE(root)) | 7581 | if (name_len > BTRFS_MAX_INLINE_DATA_SIZE(root)) |
@@ -7692,13 +7673,12 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry, | |||
7692 | out_unlock: | 7673 | out_unlock: |
7693 | if (!err) | 7674 | if (!err) |
7694 | d_instantiate(dentry, inode); | 7675 | d_instantiate(dentry, inode); |
7695 | nr = trans->blocks_used; | ||
7696 | btrfs_end_transaction(trans, root); | 7676 | btrfs_end_transaction(trans, root); |
7697 | if (drop_inode) { | 7677 | if (drop_inode) { |
7698 | inode_dec_link_count(inode); | 7678 | inode_dec_link_count(inode); |
7699 | iput(inode); | 7679 | iput(inode); |
7700 | } | 7680 | } |
7701 | btrfs_btree_balance_dirty(root, nr); | 7681 | btrfs_btree_balance_dirty(root); |
7702 | return err; | 7682 | return err; |
7703 | } | 7683 | } |
7704 | 7684 | ||
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 270f24ffe1be..300e09ac3659 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c | |||
@@ -2025,7 +2025,6 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc, | |||
2025 | struct btrfs_root_item *root_item; | 2025 | struct btrfs_root_item *root_item; |
2026 | struct btrfs_path *path; | 2026 | struct btrfs_path *path; |
2027 | struct extent_buffer *leaf; | 2027 | struct extent_buffer *leaf; |
2028 | unsigned long nr; | ||
2029 | int level; | 2028 | int level; |
2030 | int max_level; | 2029 | int max_level; |
2031 | int replaced = 0; | 2030 | int replaced = 0; |
@@ -2126,10 +2125,9 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc, | |||
2126 | path->slots[level]); | 2125 | path->slots[level]); |
2127 | root_item->drop_level = level; | 2126 | root_item->drop_level = level; |
2128 | 2127 | ||
2129 | nr = trans->blocks_used; | ||
2130 | btrfs_end_transaction_throttle(trans, root); | 2128 | btrfs_end_transaction_throttle(trans, root); |
2131 | 2129 | ||
2132 | btrfs_btree_balance_dirty(root, nr); | 2130 | btrfs_btree_balance_dirty(root); |
2133 | 2131 | ||
2134 | if (replaced && rc->stage == UPDATE_DATA_PTRS) | 2132 | if (replaced && rc->stage == UPDATE_DATA_PTRS) |
2135 | invalidate_extent_cache(root, &key, &next_key); | 2133 | invalidate_extent_cache(root, &key, &next_key); |
@@ -2156,10 +2154,9 @@ out: | |||
2156 | btrfs_update_reloc_root(trans, root); | 2154 | btrfs_update_reloc_root(trans, root); |
2157 | } | 2155 | } |
2158 | 2156 | ||
2159 | nr = trans->blocks_used; | ||
2160 | btrfs_end_transaction_throttle(trans, root); | 2157 | btrfs_end_transaction_throttle(trans, root); |
2161 | 2158 | ||
2162 | btrfs_btree_balance_dirty(root, nr); | 2159 | btrfs_btree_balance_dirty(root); |
2163 | 2160 | ||
2164 | if (replaced && rc->stage == UPDATE_DATA_PTRS) | 2161 | if (replaced && rc->stage == UPDATE_DATA_PTRS) |
2165 | invalidate_extent_cache(root, &key, &next_key); | 2162 | invalidate_extent_cache(root, &key, &next_key); |
@@ -3262,7 +3259,6 @@ static int delete_block_group_cache(struct btrfs_fs_info *fs_info, | |||
3262 | struct btrfs_path *path; | 3259 | struct btrfs_path *path; |
3263 | struct btrfs_root *root = fs_info->tree_root; | 3260 | struct btrfs_root *root = fs_info->tree_root; |
3264 | struct btrfs_trans_handle *trans; | 3261 | struct btrfs_trans_handle *trans; |
3265 | unsigned long nr; | ||
3266 | int ret = 0; | 3262 | int ret = 0; |
3267 | 3263 | ||
3268 | if (inode) | 3264 | if (inode) |
@@ -3296,9 +3292,8 @@ truncate: | |||
3296 | ret = btrfs_truncate_free_space_cache(root, trans, path, inode); | 3292 | ret = btrfs_truncate_free_space_cache(root, trans, path, inode); |
3297 | 3293 | ||
3298 | btrfs_free_path(path); | 3294 | btrfs_free_path(path); |
3299 | nr = trans->blocks_used; | ||
3300 | btrfs_end_transaction(trans, root); | 3295 | btrfs_end_transaction(trans, root); |
3301 | btrfs_btree_balance_dirty(root, nr); | 3296 | btrfs_btree_balance_dirty(root); |
3302 | out: | 3297 | out: |
3303 | iput(inode); | 3298 | iput(inode); |
3304 | return ret; | 3299 | return ret; |
@@ -3715,7 +3710,6 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc) | |||
3715 | struct btrfs_trans_handle *trans = NULL; | 3710 | struct btrfs_trans_handle *trans = NULL; |
3716 | struct btrfs_path *path; | 3711 | struct btrfs_path *path; |
3717 | struct btrfs_extent_item *ei; | 3712 | struct btrfs_extent_item *ei; |
3718 | unsigned long nr; | ||
3719 | u64 flags; | 3713 | u64 flags; |
3720 | u32 item_size; | 3714 | u32 item_size; |
3721 | int ret; | 3715 | int ret; |
@@ -3832,9 +3826,8 @@ restart: | |||
3832 | ret = btrfs_commit_transaction(trans, rc->extent_root); | 3826 | ret = btrfs_commit_transaction(trans, rc->extent_root); |
3833 | BUG_ON(ret); | 3827 | BUG_ON(ret); |
3834 | } else { | 3828 | } else { |
3835 | nr = trans->blocks_used; | ||
3836 | btrfs_end_transaction_throttle(trans, rc->extent_root); | 3829 | btrfs_end_transaction_throttle(trans, rc->extent_root); |
3837 | btrfs_btree_balance_dirty(rc->extent_root, nr); | 3830 | btrfs_btree_balance_dirty(rc->extent_root); |
3838 | } | 3831 | } |
3839 | trans = NULL; | 3832 | trans = NULL; |
3840 | 3833 | ||
@@ -3864,9 +3857,8 @@ restart: | |||
3864 | GFP_NOFS); | 3857 | GFP_NOFS); |
3865 | 3858 | ||
3866 | if (trans) { | 3859 | if (trans) { |
3867 | nr = trans->blocks_used; | ||
3868 | btrfs_end_transaction_throttle(trans, rc->extent_root); | 3860 | btrfs_end_transaction_throttle(trans, rc->extent_root); |
3869 | btrfs_btree_balance_dirty(rc->extent_root, nr); | 3861 | btrfs_btree_balance_dirty(rc->extent_root); |
3870 | } | 3862 | } |
3871 | 3863 | ||
3872 | if (!err) { | 3864 | if (!err) { |
@@ -3945,7 +3937,6 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, | |||
3945 | struct btrfs_trans_handle *trans; | 3937 | struct btrfs_trans_handle *trans; |
3946 | struct btrfs_root *root; | 3938 | struct btrfs_root *root; |
3947 | struct btrfs_key key; | 3939 | struct btrfs_key key; |
3948 | unsigned long nr; | ||
3949 | u64 objectid = BTRFS_FIRST_FREE_OBJECTID; | 3940 | u64 objectid = BTRFS_FIRST_FREE_OBJECTID; |
3950 | int err = 0; | 3941 | int err = 0; |
3951 | 3942 | ||
@@ -3973,9 +3964,8 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, | |||
3973 | 3964 | ||
3974 | err = btrfs_orphan_add(trans, inode); | 3965 | err = btrfs_orphan_add(trans, inode); |
3975 | out: | 3966 | out: |
3976 | nr = trans->blocks_used; | ||
3977 | btrfs_end_transaction(trans, root); | 3967 | btrfs_end_transaction(trans, root); |
3978 | btrfs_btree_balance_dirty(root, nr); | 3968 | btrfs_btree_balance_dirty(root); |
3979 | if (err) { | 3969 | if (err) { |
3980 | if (inode) | 3970 | if (inode) |
3981 | iput(inode); | 3971 | iput(inode); |
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index f21f39f0b1a1..7b297354e738 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c | |||
@@ -952,7 +952,6 @@ int btrfs_defrag_root(struct btrfs_root *root, int cacheonly) | |||
952 | struct btrfs_fs_info *info = root->fs_info; | 952 | struct btrfs_fs_info *info = root->fs_info; |
953 | struct btrfs_trans_handle *trans; | 953 | struct btrfs_trans_handle *trans; |
954 | int ret; | 954 | int ret; |
955 | unsigned long nr; | ||
956 | 955 | ||
957 | if (xchg(&root->defrag_running, 1)) | 956 | if (xchg(&root->defrag_running, 1)) |
958 | return 0; | 957 | return 0; |
@@ -964,9 +963,8 @@ int btrfs_defrag_root(struct btrfs_root *root, int cacheonly) | |||
964 | 963 | ||
965 | ret = btrfs_defrag_leaves(trans, root, cacheonly); | 964 | ret = btrfs_defrag_leaves(trans, root, cacheonly); |
966 | 965 | ||
967 | nr = trans->blocks_used; | ||
968 | btrfs_end_transaction(trans, root); | 966 | btrfs_end_transaction(trans, root); |
969 | btrfs_btree_balance_dirty(info->tree_root, nr); | 967 | btrfs_btree_balance_dirty(info->tree_root); |
970 | cond_resched(); | 968 | cond_resched(); |
971 | 969 | ||
972 | if (btrfs_fs_closing(root->fs_info) || ret != -EAGAIN) | 970 | if (btrfs_fs_closing(root->fs_info) || ret != -EAGAIN) |