diff options
| author | Lorenz Bauer <[email protected]> | 2020-08-21 10:29:43 +0000 |
|---|---|---|
| committer | Alexei Starovoitov <[email protected]> | 2020-08-21 22:16:11 +0000 |
| commit | 7b219da43f94a3b4d5a8aa4cc52b75b34f0301ec (patch) | |
| tree | 9e8b69676747ae4417cb3110697a45ccd5898539 /tools/testing/selftests/bpf/prog_tests/sockmap_basic.c | |
| parent | libbpf: Add perf_buffer APIs for better integration with outside epoll loop (diff) | |
| download | kernel-7b219da43f94a3b4d5a8aa4cc52b75b34f0301ec.tar.gz kernel-7b219da43f94a3b4d5a8aa4cc52b75b34f0301ec.zip | |
net: sk_msg: Simplify sk_psock initialization
Initializing psock->sk_proto and other saved callbacks is only
done in sk_psock_update_proto, after sk_psock_init has returned.
The logic for this is difficult to follow, and needlessly complex.
Instead, initialize psock->sk_proto whenever we allocate a new
psock. Additionally, assert the following invariants:
* The SK has no ULP: ULP does it's own finagling of sk->sk_prot
* sk_user_data is unused: we need it to store sk_psock
Protect our access to sk_user_data with sk_callback_lock, which
is what other users like reuseport arrays, etc. do.
The result is that an sk_psock is always fully initialized, and
that psock->sk_proto is always the "original" struct proto.
The latter allows us to use psock->sk_proto when initializing
IPv6 TCP / UDP callbacks for sockmap.
Signed-off-by: Lorenz Bauer <[email protected]>
Signed-off-by: Alexei Starovoitov <[email protected]>
Acked-by: John Fastabend <[email protected]>
Link: https://lore.kernel.org/bpf/[email protected]
Diffstat (limited to 'tools/testing/selftests/bpf/prog_tests/sockmap_basic.c')
0 files changed, 0 insertions, 0 deletions
