#define RAW_HTABLE_SIZE        MAX_INET_PROTOS
 
 struct raw_hashinfo {
-       rwlock_t lock;
+       spinlock_t lock;
        struct hlist_nulls_head ht[RAW_HTABLE_SIZE];
 };
 
 {
        int i;
 
-       rwlock_init(&hashinfo->lock);
+       spin_lock_init(&hashinfo->lock);
        for (i = 0; i < RAW_HTABLE_SIZE; i++)
                INIT_HLIST_NULLS_HEAD(&hashinfo->ht[i], i);
 }
 
 
        hlist = &h->ht[inet_sk(sk)->inet_num & (RAW_HTABLE_SIZE - 1)];
 
-       write_lock_bh(&h->lock);
+       spin_lock(&h->lock);
        __sk_nulls_add_node_rcu(sk, hlist);
        sock_set_flag(sk, SOCK_RCU_FREE);
-       write_unlock_bh(&h->lock);
+       spin_unlock(&h->lock);
        sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
 
        return 0;
 {
        struct raw_hashinfo *h = sk->sk_prot->h.raw_hash;
 
-       write_lock_bh(&h->lock);
+       spin_lock(&h->lock);
        if (__sk_nulls_del_node_init_rcu(sk))
                sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
-       write_unlock_bh(&h->lock);
+       spin_unlock(&h->lock);
 }
 EXPORT_SYMBOL_GPL(raw_unhash_sk);
 
 
        s_slot = cb->args[0];
        num = s_num = cb->args[1];
 
-       read_lock(&hashinfo->lock);
+       rcu_read_lock();
        for (slot = s_slot; slot < RAW_HTABLE_SIZE; s_num = 0, slot++) {
                num = 0;
 
        }
 
 out_unlock:
-       read_unlock(&hashinfo->lock);
+       rcu_read_unlock();
 
        cb->args[0] = slot;
        cb->args[1] = num;