static void vxlan_del_work(struct work_struct *work) { struct vxlan_sock *vs = container_of(work, struct vxlan_sock, del_work); udp_tunnel_sock_release(vs->sock); call_rcu(&vs->rcu, rcu_free_vs); }
static void geneve_del_work(struct work_struct *work) { struct geneve_sock *gs = container_of(work, struct geneve_sock, del_work); udp_tunnel_sock_release(gs->sock); kfree_rcu(gs, rcu); }
/* cleanup_bearer - break the socket/bearer association */ static void cleanup_bearer(struct work_struct *work) { struct udp_bearer *ub = container_of(work, struct udp_bearer, work); if (ub->ubsock) udp_tunnel_sock_release(ub->ubsock); synchronize_net(); kfree(ub); }
static void rxe_release_udp_tunnel(struct socket *sk) { if (sk) udp_tunnel_sock_release(sk); }