aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
authorMiao Xie <miaox@cn.fujitsu.com>2013-11-04 10:13:22 -0500
committerChris Mason <chris.mason@fusionio.com>2013-11-11 22:13:23 -0500
commit18cd8ea6df32e72548a4b055cba54d1a898c81e5 (patch)
tree7a3796ca5a384b2cff5900e0972d31d0af5a5b24 /fs/btrfs
parent38c135af8e22baf2ef3ebf9b213e398997a90946 (diff)
Btrfs: pick up the code for the item number calculation in flush_space()
This patch picked up the code that was used to calculate the number of the items for which we need reserve space, and we will use it in the next patch. Signed-off-by: Miao Xie <miaox@cn.fujitsu.com> Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r--fs/btrfs/extent-tree.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 2564cbfdf417..9183f9cbc121 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -4022,6 +4022,18 @@ static void btrfs_writeback_inodes_sb_nr(struct btrfs_root *root,
4022 } 4022 }
4023} 4023}
4024 4024
4025static inline int calc_reclaim_items_nr(struct btrfs_root *root, u64 to_reclaim)
4026{
4027 u64 bytes;
4028 int nr;
4029
4030 bytes = btrfs_calc_trans_metadata_size(root, 1);
4031 nr = (int)div64_u64(to_reclaim, bytes);
4032 if (!nr)
4033 nr = 1;
4034 return nr;
4035}
4036
4025/* 4037/*
4026 * shrink metadata reservation for delalloc 4038 * shrink metadata reservation for delalloc
4027 */ 4039 */
@@ -4167,16 +4179,11 @@ static int flush_space(struct btrfs_root *root,
4167 switch (state) { 4179 switch (state) {
4168 case FLUSH_DELAYED_ITEMS_NR: 4180 case FLUSH_DELAYED_ITEMS_NR:
4169 case FLUSH_DELAYED_ITEMS: 4181 case FLUSH_DELAYED_ITEMS:
4170 if (state == FLUSH_DELAYED_ITEMS_NR) { 4182 if (state == FLUSH_DELAYED_ITEMS_NR)
4171 u64 bytes = btrfs_calc_trans_metadata_size(root, 1); 4183 nr = calc_reclaim_items_nr(root, num_bytes) * 2;
4172 4184 else
4173 nr = (int)div64_u64(num_bytes, bytes);
4174 if (!nr)
4175 nr = 1;
4176 nr *= 2;
4177 } else {
4178 nr = -1; 4185 nr = -1;
4179 } 4186
4180 trans = btrfs_join_transaction(root); 4187 trans = btrfs_join_transaction(root);
4181 if (IS_ERR(trans)) { 4188 if (IS_ERR(trans)) {
4182 ret = PTR_ERR(trans); 4189 ret = PTR_ERR(trans);