Btrfs: optimize tree-log.c:count_inode_refs()
Avoid repeated tree searches by processing all inode ref items in a leaf at once instead of processing one at a time, followed by a path release and a tree search for a key with a decremented offset. Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com> Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
This commit is contained in:
parent
229eed4348
commit
e93ae26fe1
@ -1312,6 +1312,7 @@ static int count_inode_refs(struct btrfs_root *root,
|
||||
break;
|
||||
path->slots[0]--;
|
||||
}
|
||||
process_slot:
|
||||
btrfs_item_key_to_cpu(path->nodes[0], &key,
|
||||
path->slots[0]);
|
||||
if (key.objectid != ino ||
|
||||
@ -1332,6 +1333,10 @@ static int count_inode_refs(struct btrfs_root *root,
|
||||
|
||||
if (key.offset == 0)
|
||||
break;
|
||||
if (path->slots[0] > 0) {
|
||||
path->slots[0]--;
|
||||
goto process_slot;
|
||||
}
|
||||
key.offset--;
|
||||
btrfs_release_path(path);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user