|
@@ -872,6 +872,7 @@ static int packet_release(struct socket *sock)
|
|
|
|
|
|
write_lock_bh(&net->packet.sklist_lock);
|
|
|
sk_del_node_init(sk);
|
|
|
+ sock_prot_inuse_add(net, sk->sk_prot, -1);
|
|
|
write_unlock_bh(&net->packet.sklist_lock);
|
|
|
|
|
|
/*
|
|
@@ -910,7 +911,6 @@ static int packet_release(struct socket *sock)
|
|
|
skb_queue_purge(&sk->sk_receive_queue);
|
|
|
sk_refcnt_debug_release(sk);
|
|
|
|
|
|
- sock_prot_inuse_add(net, sk->sk_prot, -1);
|
|
|
sock_put(sk);
|
|
|
return 0;
|
|
|
}
|
|
@@ -1085,8 +1085,8 @@ static int packet_create(struct net *net, struct socket *sock, int protocol)
|
|
|
|
|
|
write_lock_bh(&net->packet.sklist_lock);
|
|
|
sk_add_node(sk, &net->packet.sklist);
|
|
|
- write_unlock_bh(&net->packet.sklist_lock);
|
|
|
sock_prot_inuse_add(net, &packet_proto, 1);
|
|
|
+ write_unlock_bh(&net->packet.sklist_lock);
|
|
|
return(0);
|
|
|
out:
|
|
|
return err;
|