Skip to content

Commit d25572c

Browse files
Hou TaoKernel Patches Daemon
authored andcommitted
bpf: Bail out early in __htab_map_lookup_and_delete_elem()
Use goto statement to bail out early when the target element is not found, instead of using a large else branch to handle the more likely case. This change doesn't affect functionality and simply make the code cleaner. Signed-off-by: Hou Tao <[email protected]> Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
1 parent 3f2d87a commit d25572c

File tree

1 file changed

+26
-25
lines changed

1 file changed

+26
-25
lines changed

kernel/bpf/hashtab.c

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1635,37 +1635,38 @@ static int __htab_map_lookup_and_delete_elem(struct bpf_map *map, void *key,
16351635
l = lookup_elem_raw(head, hash, key, key_size);
16361636
if (!l) {
16371637
ret = -ENOENT;
1638-
} else {
1639-
if (is_percpu) {
1640-
u32 roundup_value_size = round_up(map->value_size, 8);
1641-
void __percpu *pptr;
1642-
int off = 0, cpu;
1638+
goto out_unlock;
1639+
}
16431640

1644-
pptr = htab_elem_get_ptr(l, key_size);
1645-
for_each_possible_cpu(cpu) {
1646-
copy_map_value_long(&htab->map, value + off, per_cpu_ptr(pptr, cpu));
1647-
check_and_init_map_value(&htab->map, value + off);
1648-
off += roundup_value_size;
1649-
}
1650-
} else {
1651-
u32 roundup_key_size = round_up(map->key_size, 8);
1641+
if (is_percpu) {
1642+
u32 roundup_value_size = round_up(map->value_size, 8);
1643+
void __percpu *pptr;
1644+
int off = 0, cpu;
16521645

1653-
if (flags & BPF_F_LOCK)
1654-
copy_map_value_locked(map, value, l->key +
1655-
roundup_key_size,
1656-
true);
1657-
else
1658-
copy_map_value(map, value, l->key +
1659-
roundup_key_size);
1660-
/* Zeroing special fields in the temp buffer */
1661-
check_and_init_map_value(map, value);
1646+
pptr = htab_elem_get_ptr(l, key_size);
1647+
for_each_possible_cpu(cpu) {
1648+
copy_map_value_long(&htab->map, value + off, per_cpu_ptr(pptr, cpu));
1649+
check_and_init_map_value(&htab->map, value + off);
1650+
off += roundup_value_size;
16621651
}
1652+
} else {
1653+
u32 roundup_key_size = round_up(map->key_size, 8);
16631654

1664-
hlist_nulls_del_rcu(&l->hash_node);
1665-
if (!is_lru_map)
1666-
free_htab_elem(htab, l);
1655+
if (flags & BPF_F_LOCK)
1656+
copy_map_value_locked(map, value, l->key +
1657+
roundup_key_size,
1658+
true);
1659+
else
1660+
copy_map_value(map, value, l->key +
1661+
roundup_key_size);
1662+
/* Zeroing special fields in the temp buffer */
1663+
check_and_init_map_value(map, value);
16671664
}
1665+
hlist_nulls_del_rcu(&l->hash_node);
1666+
if (!is_lru_map)
1667+
free_htab_elem(htab, l);
16681668

1669+
out_unlock:
16691670
htab_unlock_bucket(htab, b, hash, bflags);
16701671

16711672
if (is_lru_map && l)

0 commit comments

Comments
 (0)