mirror of
https://github.com/kdave/btrfs-progs
synced 2025-01-13 09:11:36 +00:00
btrfs-progs: Return earlier for previous item
Follow kernel code to return earlier for btrfs_previous_item() function. Before this patch, btrfs_previous_item() doesn't use its min_objectid to exit, this makes caller to check key to exit, and if caller doesn't check, it will iterate all previous item. This patch will check min_objectid and type, to early return and save some time. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
7c43be8b57
commit
6f508a01f5
12
ctree.c
12
ctree.c
@ -2880,6 +2880,7 @@ int btrfs_previous_item(struct btrfs_root *root,
|
||||
{
|
||||
struct btrfs_key found_key;
|
||||
struct extent_buffer *leaf;
|
||||
u32 nritems;
|
||||
int ret;
|
||||
|
||||
while(1) {
|
||||
@ -2891,9 +2892,20 @@ int btrfs_previous_item(struct btrfs_root *root,
|
||||
path->slots[0]--;
|
||||
}
|
||||
leaf = path->nodes[0];
|
||||
nritems = btrfs_header_nritems(leaf);
|
||||
if (nritems == 0)
|
||||
return 1;
|
||||
if (path->slots[0] == nritems)
|
||||
path->slots[0]--;
|
||||
|
||||
btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
|
||||
if (found_key.objectid < min_objectid)
|
||||
break;
|
||||
if (found_key.type == type)
|
||||
return 0;
|
||||
if (found_key.objectid == min_objectid &&
|
||||
found_key.type < type)
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user