Commit 55994887 authored by Filipe David Borba Manana's avatar Filipe David Borba Manana Committed by Chris Mason

Btrfs: optimize extent item search in run_delayed_extent_op

Instead of doing another extent tree search if the first search failed
to find a metadata item, check if the previous item in the leaf is an
extent item and use it if it is, otherwise do the second tree search
for an extent item.
Signed-off-by: default avatarFilipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
parent cab45e22
......@@ -2130,15 +2130,28 @@ static int run_delayed_extent_op(struct btrfs_trans_handle *trans,
}
if (ret > 0) {
if (metadata) {
btrfs_release_path(path);
metadata = 0;
if (path->slots[0] > 0) {
path->slots[0]--;
btrfs_item_key_to_cpu(path->nodes[0], &key,
path->slots[0]);
if (key.objectid == node->bytenr &&
key.type == BTRFS_EXTENT_ITEM_KEY &&
key.offset == node->num_bytes)
ret = 0;
}
if (ret > 0) {
btrfs_release_path(path);
metadata = 0;
key.offset = node->num_bytes;
key.type = BTRFS_EXTENT_ITEM_KEY;
goto again;
key.objectid = node->bytenr;
key.offset = node->num_bytes;
key.type = BTRFS_EXTENT_ITEM_KEY;
goto again;
}
} else {
err = -EIO;
goto out;
}
err = -EIO;
goto out;
}
leaf = path->nodes[0];
......
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