diff options
Diffstat (limited to 'net/ipv6/raw.c')
-rw-r--r-- | net/ipv6/raw.c | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index f82ac33db..70394dc03 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -7,7 +7,7 @@ * * Adapted from linux/net/ipv4/raw.c * - * $Id: raw.c,v 1.24 1999/04/22 10:07:45 davem Exp $ + * $Id: raw.c,v 1.26 1999/06/09 10:11:18 davem Exp $ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -50,11 +50,11 @@ static void raw_v6_hash(struct sock *sk) num &= (RAWV6_HTABLE_SIZE - 1); skp = &raw_v6_htable[num]; - SOCKHASH_LOCK(); + SOCKHASH_LOCK_WRITE(); sk->next = *skp; *skp = sk; sk->hashent = num; - SOCKHASH_UNLOCK(); + SOCKHASH_UNLOCK_WRITE(); } static void raw_v6_unhash(struct sock *sk) @@ -65,7 +65,7 @@ static void raw_v6_unhash(struct sock *sk) num &= (RAWV6_HTABLE_SIZE - 1); skp = &raw_v6_htable[num]; - SOCKHASH_LOCK(); + SOCKHASH_LOCK_WRITE(); while(*skp != NULL) { if(*skp == sk) { *skp = sk->next; @@ -73,7 +73,7 @@ static void raw_v6_unhash(struct sock *sk) } skp = &((*skp)->next); } - SOCKHASH_UNLOCK(); + SOCKHASH_UNLOCK_WRITE(); } static void raw_v6_rehash(struct sock *sk) @@ -85,7 +85,7 @@ static void raw_v6_rehash(struct sock *sk) num &= (RAWV6_HTABLE_SIZE - 1); skp = &raw_v6_htable[oldnum]; - SOCKHASH_LOCK(); + SOCKHASH_LOCK_WRITE(); while(*skp != NULL) { if(*skp == sk) { *skp = sk->next; @@ -96,20 +96,9 @@ static void raw_v6_rehash(struct sock *sk) sk->next = raw_v6_htable[num]; raw_v6_htable[num] = sk; sk->hashent = num; - SOCKHASH_UNLOCK(); + SOCKHASH_UNLOCK_WRITE(); } -static __inline__ int inet6_mc_check(struct sock *sk, struct in6_addr *addr) -{ - struct ipv6_mc_socklist *mc; - - for (mc = sk->net_pinfo.af_inet6.ipv6_mc_list; mc; mc=mc->next) { - if (ipv6_addr_cmp(&mc->addr, addr) == 0) - return 1; - } - - return 0; -} /* Grumble... icmp and ip_input want to get at this... */ struct sock *raw_v6_lookup(struct sock *sk, unsigned short num, @@ -631,6 +620,8 @@ static int rawv6_getsockopt(struct sock *sk, int level, int optname, static void rawv6_close(struct sock *sk, long timeout) { + bh_lock_sock(sk); + /* See for explanation: raw_close in ipv4/raw.c */ sk->state = TCP_CLOSE; raw_v6_unhash(sk); |