mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-24 01:41:39 +00:00
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: Josef Bacik <jbacik@fusionio.com>
This commit is contained in:
parent
354aa0fb6d
commit
67b0fd63d5
1 changed files with 10 additions and 10 deletions
|
@ -3817,10 +3817,10 @@ static int may_commit_transaction(struct btrfs_root *root,
|
|||
}
|
||||
|
||||
enum flush_state {
|
||||
FLUSH_DELALLOC = 1,
|
||||
FLUSH_DELALLOC_WAIT = 2,
|
||||
FLUSH_DELAYED_ITEMS_NR = 3,
|
||||
FLUSH_DELAYED_ITEMS = 4,
|
||||
FLUSH_DELAYED_ITEMS_NR = 1,
|
||||
FLUSH_DELAYED_ITEMS = 2,
|
||||
FLUSH_DELALLOC = 3,
|
||||
FLUSH_DELALLOC_WAIT = 4,
|
||||
ALLOC_CHUNK = 5,
|
||||
COMMIT_TRANS = 6,
|
||||
};
|
||||
|
@ -3834,11 +3834,6 @@ static int flush_space(struct btrfs_root *root,
|
|||
int ret = 0;
|
||||
|
||||
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:
|
||||
if (state == FLUSH_DELAYED_ITEMS_NR) {
|
||||
|
@ -3859,6 +3854,11 @@ static int flush_space(struct btrfs_root *root,
|
|||
ret = btrfs_run_delayed_items_nr(trans, root, nr);
|
||||
btrfs_end_transaction(trans, root);
|
||||
break;
|
||||
case FLUSH_DELALLOC:
|
||||
case FLUSH_DELALLOC_WAIT:
|
||||
shrink_delalloc(root, num_bytes, orig_bytes,
|
||||
state == FLUSH_DELALLOC_WAIT);
|
||||
break;
|
||||
case ALLOC_CHUNK:
|
||||
trans = btrfs_join_transaction(root);
|
||||
if (IS_ERR(trans)) {
|
||||
|
@ -3903,7 +3903,7 @@ static int reserve_metadata_bytes(struct btrfs_root *root,
|
|||
struct btrfs_space_info *space_info = block_rsv->space_info;
|
||||
u64 used;
|
||||
u64 num_bytes = orig_bytes;
|
||||
int flush_state = FLUSH_DELALLOC;
|
||||
int flush_state = FLUSH_DELAYED_ITEMS_NR;
|
||||
int ret = 0;
|
||||
bool flushing = false;
|
||||
bool committed = false;
|
||||
|
|
Loading…
Reference in a new issue