Skip to content

Commit

Permalink
Btrfs: pick up the code for the item number calculation in flush_space()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Miao Xie authored and Chris Mason committed Nov 12, 2013
1 parent 38c135a commit 18cd8ea
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions fs/btrfs/extent-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down Expand Up @@ -4167,16 +4179,11 @@ static int flush_space(struct btrfs_root *root,
switch (state) {
case FLUSH_DELAYED_ITEMS_NR:
case FLUSH_DELAYED_ITEMS:
if (state == FLUSH_DELAYED_ITEMS_NR) {
u64 bytes = btrfs_calc_trans_metadata_size(root, 1);

nr = (int)div64_u64(num_bytes, bytes);
if (!nr)
nr = 1;
nr *= 2;
} else {
if (state == FLUSH_DELAYED_ITEMS_NR)
nr = calc_reclaim_items_nr(root, num_bytes) * 2;
else
nr = -1;
}

trans = btrfs_join_transaction(root);
if (IS_ERR(trans)) {
ret = PTR_ERR(trans);
Expand Down

0 comments on commit 18cd8ea

Please sign in to comment.