spin_lock_bh(lock);
        done =__sk_nulls_del_node_init_rcu(sk);
-       spin_unlock_bh(lock);
        if (done)
                sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
+       spin_unlock_bh(lock);
 }
 EXPORT_SYMBOL_GPL(inet_unhash);
 
 
 
        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);
 
        /*
        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;
 }
 
        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;