Commit 67b0fd63 authored by Josef Bacik's avatar Josef Bacik Committed by Chris Mason

Btrfs: run delayed refs first when out of space

Running delayed refs is faster than running delalloc, so lets do that first
to try and reclaim space.  This makes my fs_mark test about 20% faster.
Thanks,
Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
parent 354aa0fb
...@@ -3817,10 +3817,10 @@ static int may_commit_transaction(struct btrfs_root *root, ...@@ -3817,10 +3817,10 @@ static int may_commit_transaction(struct btrfs_root *root,
} }
enum flush_state { enum flush_state {
FLUSH_DELALLOC = 1, FLUSH_DELAYED_ITEMS_NR = 1,
FLUSH_DELALLOC_WAIT = 2, FLUSH_DELAYED_ITEMS = 2,
FLUSH_DELAYED_ITEMS_NR = 3, FLUSH_DELALLOC = 3,
FLUSH_DELAYED_ITEMS = 4, FLUSH_DELALLOC_WAIT = 4,
ALLOC_CHUNK = 5, ALLOC_CHUNK = 5,
COMMIT_TRANS = 6, COMMIT_TRANS = 6,
}; };
...@@ -3834,11 +3834,6 @@ static int flush_space(struct btrfs_root *root, ...@@ -3834,11 +3834,6 @@ static int flush_space(struct btrfs_root *root,
int ret = 0; int ret = 0;
switch (state) { switch (state) {
case FLUSH_DELALLOC:
case FLUSH_DELALLOC_WAIT:
shrink_delalloc(root, num_bytes, orig_bytes,
state == FLUSH_DELALLOC_WAIT);
break;
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) {
...@@ -3859,6 +3854,11 @@ static int flush_space(struct btrfs_root *root, ...@@ -3859,6 +3854,11 @@ static int flush_space(struct btrfs_root *root,
ret = btrfs_run_delayed_items_nr(trans, root, nr); ret = btrfs_run_delayed_items_nr(trans, root, nr);
btrfs_end_transaction(trans, root); btrfs_end_transaction(trans, root);
break; break;
case FLUSH_DELALLOC:
case FLUSH_DELALLOC_WAIT:
shrink_delalloc(root, num_bytes, orig_bytes,
state == FLUSH_DELALLOC_WAIT);
break;
case ALLOC_CHUNK: case ALLOC_CHUNK:
trans = btrfs_join_transaction(root); trans = btrfs_join_transaction(root);
if (IS_ERR(trans)) { if (IS_ERR(trans)) {
...@@ -3903,7 +3903,7 @@ static int reserve_metadata_bytes(struct btrfs_root *root, ...@@ -3903,7 +3903,7 @@ static int reserve_metadata_bytes(struct btrfs_root *root,
struct btrfs_space_info *space_info = block_rsv->space_info; struct btrfs_space_info *space_info = block_rsv->space_info;
u64 used; u64 used;
u64 num_bytes = orig_bytes; u64 num_bytes = orig_bytes;
int flush_state = FLUSH_DELALLOC; int flush_state = FLUSH_DELAYED_ITEMS_NR;
int ret = 0; int ret = 0;
bool flushing = false; bool flushing = false;
bool committed = false; bool committed = false;
......
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