mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
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 <houtao1@huawei.com> Reviewed-by: Toke Høiland-Jørgensen <toke@kernel.org> Link: https://lore.kernel.org/r/20250117101816.2101857-3-houtao@huaweicloud.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
45dc92c32a
commit
588c6ead32
|
|
@ -1635,37 +1635,38 @@ static int __htab_map_lookup_and_delete_elem(struct bpf_map *map, void *key,
|
|||
l = lookup_elem_raw(head, hash, key, key_size);
|
||||
if (!l) {
|
||||
ret = -ENOENT;
|
||||
} else {
|
||||
if (is_percpu) {
|
||||
u32 roundup_value_size = round_up(map->value_size, 8);
|
||||
void __percpu *pptr;
|
||||
int off = 0, cpu;
|
||||
|
||||
pptr = htab_elem_get_ptr(l, key_size);
|
||||
for_each_possible_cpu(cpu) {
|
||||
copy_map_value_long(&htab->map, value + off, per_cpu_ptr(pptr, cpu));
|
||||
check_and_init_map_value(&htab->map, value + off);
|
||||
off += roundup_value_size;
|
||||
}
|
||||
} else {
|
||||
u32 roundup_key_size = round_up(map->key_size, 8);
|
||||
|
||||
if (flags & BPF_F_LOCK)
|
||||
copy_map_value_locked(map, value, l->key +
|
||||
roundup_key_size,
|
||||
true);
|
||||
else
|
||||
copy_map_value(map, value, l->key +
|
||||
roundup_key_size);
|
||||
/* Zeroing special fields in the temp buffer */
|
||||
check_and_init_map_value(map, value);
|
||||
}
|
||||
|
||||
hlist_nulls_del_rcu(&l->hash_node);
|
||||
if (!is_lru_map)
|
||||
free_htab_elem(htab, l);
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
if (is_percpu) {
|
||||
u32 roundup_value_size = round_up(map->value_size, 8);
|
||||
void __percpu *pptr;
|
||||
int off = 0, cpu;
|
||||
|
||||
pptr = htab_elem_get_ptr(l, key_size);
|
||||
for_each_possible_cpu(cpu) {
|
||||
copy_map_value_long(&htab->map, value + off, per_cpu_ptr(pptr, cpu));
|
||||
check_and_init_map_value(&htab->map, value + off);
|
||||
off += roundup_value_size;
|
||||
}
|
||||
} else {
|
||||
u32 roundup_key_size = round_up(map->key_size, 8);
|
||||
|
||||
if (flags & BPF_F_LOCK)
|
||||
copy_map_value_locked(map, value, l->key +
|
||||
roundup_key_size,
|
||||
true);
|
||||
else
|
||||
copy_map_value(map, value, l->key +
|
||||
roundup_key_size);
|
||||
/* Zeroing special fields in the temp buffer */
|
||||
check_and_init_map_value(map, value);
|
||||
}
|
||||
hlist_nulls_del_rcu(&l->hash_node);
|
||||
if (!is_lru_map)
|
||||
free_htab_elem(htab, l);
|
||||
|
||||
out_unlock:
|
||||
htab_unlock_bucket(htab, b, hash, bflags);
|
||||
|
||||
if (is_lru_map && l)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user