Commit 2391245a authored by Filipe Manana's avatar Filipe Manana Committed by David Sterba

btrfs: avoid starting new transaction when flushing delayed items and refs

When flushing space we join a transaction to flush delayed items and
delayed references, in order to try to release space. However using
btrfs_join_transaction() not only joins an existing transaction as well
as it starts a new transaction if there is none open. If there is no
transaction open, we don't have neither delayed items nor delayed
references, so creating a new transaction is a waste of time, IO and
creates an unnecessary rotation of the backup roots without gaining any
benefits (including releasing space).

So use btrfs_join_transaction_nostart() when attempting to flush delayed
items and references.
Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent ed8947bc
...@@ -725,9 +725,11 @@ static void flush_space(struct btrfs_fs_info *fs_info, ...@@ -725,9 +725,11 @@ static void flush_space(struct btrfs_fs_info *fs_info,
else else
nr = -1; nr = -1;
trans = btrfs_join_transaction(root); trans = btrfs_join_transaction_nostart(root);
if (IS_ERR(trans)) { if (IS_ERR(trans)) {
ret = PTR_ERR(trans); ret = PTR_ERR(trans);
if (ret == -ENOENT)
ret = 0;
break; break;
} }
ret = btrfs_run_delayed_items_nr(trans, nr); ret = btrfs_run_delayed_items_nr(trans, nr);
...@@ -743,9 +745,11 @@ static void flush_space(struct btrfs_fs_info *fs_info, ...@@ -743,9 +745,11 @@ static void flush_space(struct btrfs_fs_info *fs_info,
break; break;
case FLUSH_DELAYED_REFS_NR: case FLUSH_DELAYED_REFS_NR:
case FLUSH_DELAYED_REFS: case FLUSH_DELAYED_REFS:
trans = btrfs_join_transaction(root); trans = btrfs_join_transaction_nostart(root);
if (IS_ERR(trans)) { if (IS_ERR(trans)) {
ret = PTR_ERR(trans); ret = PTR_ERR(trans);
if (ret == -ENOENT)
ret = 0;
break; break;
} }
if (state == FLUSH_DELAYED_REFS_NR) if (state == FLUSH_DELAYED_REFS_NR)
......
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