diff options
Diffstat (limited to 'net/ipv6/protocol.c')
-rw-r--r-- | net/ipv6/protocol.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/net/ipv6/protocol.c b/net/ipv6/protocol.c index 9a7978fdc02a..053082dfc93e 100644 --- a/net/ipv6/protocol.c +++ b/net/ipv6/protocol.c | |||
@@ -29,9 +29,7 @@ const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS] __read_mostly; | |||
29 | 29 | ||
30 | int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char protocol) | 30 | int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char protocol) |
31 | { | 31 | { |
32 | int hash = protocol & (MAX_INET_PROTOS - 1); | 32 | return !cmpxchg((const struct inet6_protocol **)&inet6_protos[protocol], |
33 | |||
34 | return !cmpxchg((const struct inet6_protocol **)&inet6_protos[hash], | ||
35 | NULL, prot) ? 0 : -1; | 33 | NULL, prot) ? 0 : -1; |
36 | } | 34 | } |
37 | EXPORT_SYMBOL(inet6_add_protocol); | 35 | EXPORT_SYMBOL(inet6_add_protocol); |
@@ -42,9 +40,9 @@ EXPORT_SYMBOL(inet6_add_protocol); | |||
42 | 40 | ||
43 | int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char protocol) | 41 | int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char protocol) |
44 | { | 42 | { |
45 | int ret, hash = protocol & (MAX_INET_PROTOS - 1); | 43 | int ret; |
46 | 44 | ||
47 | ret = (cmpxchg((const struct inet6_protocol **)&inet6_protos[hash], | 45 | ret = (cmpxchg((const struct inet6_protocol **)&inet6_protos[protocol], |
48 | prot, NULL) == prot) ? 0 : -1; | 46 | prot, NULL) == prot) ? 0 : -1; |
49 | 47 | ||
50 | synchronize_net(); | 48 | synchronize_net(); |