From: Jesse Gross Date: Thu, 6 Dec 2012 19:06:06 +0000 (-0800) Subject: vxlan: Use sk_release_kernel() instead of sock_release(). X-Git-Tag: v1.10.0~319 X-Git-Url: http://git.cascardo.eti.br/?a=commitdiff_plain;h=df80d44d9ef1a586565c9e91bf43ab28002e1a7d;p=cascardo%2Fovs.git vxlan: Use sk_release_kernel() instead of sock_release(). A socket that is created using sock_create_kern() and then switched to a namespace using sk_change_net() should be released using sk_release_kernel() instead of sock_release(). This is because sk_change_net() has already released a reference to the namespace and we shouldn't try to release it again later. Cc: Kyle Mestery Signed-off-by: Jesse Gross Acked-by: Kyle Mestery --- diff --git a/datapath/vport-vxlan.c b/datapath/vport-vxlan.c index 137e5d861..3d7260f39 100644 --- a/datapath/vport-vxlan.c +++ b/datapath/vport-vxlan.c @@ -222,7 +222,7 @@ static int vxlan_socket_init(struct vxlan_port *vxlan_port, struct net *net) return 0; error_sock: - sock_release(vxlan_port->vxlan_rcv_socket); + sk_release_kernel(vxlan_port->vxlan_rcv_socket->sk); error: pr_warn("cannot register vxlan protocol handler\n"); return err; @@ -234,7 +234,7 @@ static void vxlan_tunnel_release(struct vxlan_port *vxlan_port) if (vxlan_port->count == 0) { /* Release old socket */ - sock_release(vxlan_port->vxlan_rcv_socket); + sk_release_kernel(vxlan_port->vxlan_rcv_socket->sk); list_del(&vxlan_port->list); kfree(vxlan_port); }