On (06/27/17 15:38), David Miller wrote: > > It could simply be the case that rds-tcp is the first setup that > created that situation where there is a parent->sk already.
Possibly, I noticed that other callers call sock_create_lite() and I dont know the history here - this seems to have been the case from day-1 of rds-tcp. (and I dread changing rds_tcp_accept_kern() to do this, because then every module unload would need to go and check if sock->sk is non-null first, before cleaning it up > Why does rds-tcp need to call sock_graft() without those invariants > met? It would certainly help to declare "dont use sock_creeate_kern() if you are going to accept on this socket"- I dont see that being mandated anywhere. It would also help to have a BUG_ON(parent->sk) or at least a WARN_ON(parent->sk) in sock_graft, before unilaterally assigning it to the new sk. --Sowmini