Message ID | 20220218181801.2971275-1-eric.dumazet@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 9087c6ff8dfe0a070e4e05a434399080603c29de |
Delegated to: | BPF |
Headers | show |
Series | [bpf-next] bpf: Call maybe_wait_bpf_programs() only once from generic_map_delete_batch() | expand |
On 02/18, Eric Dumazet wrote: > From: Eric Dumazet <edumazet@google.com> > 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 <edumazet@google.com> > Cc: Stanislav Fomichev <sdf@google.com> Makes sense. Probably a copy-paste from the non-batch case... Reviewed-by: Stanislav Fomichev <sdf@google.com> > Cc: Brian Vazquez <brianvv@google.com> > --- > kernel/bpf/syscall.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c > index > a72f63d5a7daee057bcec3fa6119aca32e2945f7..9c7a72b65eee0ec8d54d36e2c0ab9ff4962091af > 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; > } > -- > 2.35.1.473.g83b2b277ed-goog
Hello: This patch was applied to bpf/bpf-next.git (master) by Daniel Borkmann <daniel@iogearbox.net>: On Fri, 18 Feb 2022 10:18:01 -0800 you wrote: > From: Eric Dumazet <edumazet@google.com> > > 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 <edumazet@google.com> > Cc: Stanislav Fomichev <sdf@google.com> > Cc: Brian Vazquez <brianvv@google.com> > > [...] Here is the summary with links: - [bpf-next] bpf: Call maybe_wait_bpf_programs() only once from generic_map_delete_batch() https://git.kernel.org/bpf/bpf-next/c/9087c6ff8dfe You are awesome, thank you!
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index a72f63d5a7daee057bcec3fa6119aca32e2945f7..9c7a72b65eee0ec8d54d36e2c0ab9ff4962091af 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; }