Commit 18cd8ea6 authored by Miao Xie's avatar Miao Xie Committed by Chris Mason

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: default avatarMiao Xie <miaox@cn.fujitsu.com>
Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
parent 38c135af
...@@ -4022,6 +4022,18 @@ static void btrfs_writeback_inodes_sb_nr(struct btrfs_root *root, ...@@ -4022,6 +4022,18 @@ static void btrfs_writeback_inodes_sb_nr(struct btrfs_root *root,
} }
} }
static inline int calc_reclaim_items_nr(struct btrfs_root *root, u64 to_reclaim)
{
u64 bytes;
int nr;
bytes = btrfs_calc_trans_metadata_size(root, 1);
nr = (int)div64_u64(to_reclaim, bytes);
if (!nr)
nr = 1;
return nr;
}
/* /*
* shrink metadata reservation for delalloc * shrink metadata reservation for delalloc
*/ */
...@@ -4167,16 +4179,11 @@ static int flush_space(struct btrfs_root *root, ...@@ -4167,16 +4179,11 @@ static int flush_space(struct btrfs_root *root,
switch (state) { switch (state) {
case FLUSH_DELAYED_ITEMS_NR: case FLUSH_DELAYED_ITEMS_NR:
case FLUSH_DELAYED_ITEMS: case FLUSH_DELAYED_ITEMS:
if (state == FLUSH_DELAYED_ITEMS_NR) { if (state == FLUSH_DELAYED_ITEMS_NR)
u64 bytes = btrfs_calc_trans_metadata_size(root, 1); nr = calc_reclaim_items_nr(root, num_bytes) * 2;
else
nr = (int)div64_u64(num_bytes, bytes);
if (!nr)
nr = 1;
nr *= 2;
} else {
nr = -1; nr = -1;
}
trans = btrfs_join_transaction(root); trans = btrfs_join_transaction(root);
if (IS_ERR(trans)) { if (IS_ERR(trans)) {
ret = PTR_ERR(trans); ret = PTR_ERR(trans);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment