From: Eric Dumazet Date: Fri, 18 Feb 2022 18:18:01 +0000 (-0800) Subject: bpf: Call maybe_wait_bpf_programs() only once from generic_map_delete_batch() X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=9087c6ff8dfe0a070e4e05a434399080603c29de;p=linux.git bpf: Call maybe_wait_bpf_programs() only once from generic_map_delete_batch() As stated in the comment found in maybe_wait_bpf_programs(), the synchronize_rcu() barrier is only needed before returning to userspace, not after each deletion in the batch. Signed-off-by: Eric Dumazet Signed-off-by: Daniel Borkmann Reviewed-by: Stanislav Fomichev Link: https://lore.kernel.org/bpf/20220218181801.2971275-1-eric.dumazet@gmail.com --- diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index a72f63d5a7dae..9c7a72b65eee0 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -1352,7 +1352,6 @@ int generic_map_delete_batch(struct bpf_map *map, err = map->ops->map_delete_elem(map, key); rcu_read_unlock(); bpf_enable_instrumentation(); - maybe_wait_bpf_programs(map); if (err) break; cond_resched(); @@ -1361,6 +1360,8 @@ int generic_map_delete_batch(struct bpf_map *map, err = -EFAULT; kvfree(key); + + maybe_wait_bpf_programs(map); return err; }