Lorenz Bauer wrote: > 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 <lmb@xxxxxxxxxxxxxx> > --- Looks like a nice bit of cleanup thanks. I think we might be able to fold up more of this code as well, but I'll take a look in a bit. Acked-by: John Fastabend <john.fastabend@xxxxxxxxx>