diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2006-08-10 00:03:17 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-09-22 17:54:20 -0400 |
commit | f0fd27d42e39b91f85e1840ec49b072fd6c545b8 (patch) | |
tree | aa4d1cbe1671507e4d0ec6787076db92a0ee5926 | |
parent | 55737fda0bc73cb20f702301d8b52938a5a43630 (diff) |
[NET]: sock_register interface changes
The sock_register() doesn't change the family, so the protocols can
define it read-only. No caller ever checks return value from
sock_unregister()
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/linux/net.h | 4 | ||||
-rw-r--r-- | net/socket.c | 10 |
2 files changed, 6 insertions, 8 deletions
diff --git a/include/linux/net.h b/include/linux/net.h index 1bd76327ee2b..c257f716e00f 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
@@ -176,8 +176,8 @@ struct iovec; | |||
176 | struct kvec; | 176 | struct kvec; |
177 | 177 | ||
178 | extern int sock_wake_async(struct socket *sk, int how, int band); | 178 | extern int sock_wake_async(struct socket *sk, int how, int band); |
179 | extern int sock_register(struct net_proto_family *fam); | 179 | extern int sock_register(const struct net_proto_family *fam); |
180 | extern int sock_unregister(int family); | 180 | extern void sock_unregister(int family); |
181 | extern int sock_create(int family, int type, int proto, | 181 | extern int sock_create(int family, int type, int proto, |
182 | struct socket **res); | 182 | struct socket **res); |
183 | extern int sock_create_kern(int family, int type, int proto, | 183 | extern int sock_create_kern(int family, int type, int proto, |
diff --git a/net/socket.c b/net/socket.c index b5a3fcb9ed6d..4147fe4bf41d 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -147,7 +147,7 @@ static struct file_operations socket_file_ops = { | |||
147 | */ | 147 | */ |
148 | 148 | ||
149 | static DEFINE_SPINLOCK(net_family_lock); | 149 | static DEFINE_SPINLOCK(net_family_lock); |
150 | static const struct net_proto_family *net_families[NPROTO]; | 150 | static const struct net_proto_family *net_families[NPROTO] __read_mostly; |
151 | 151 | ||
152 | /* | 152 | /* |
153 | * Statistics counters of the socket lists | 153 | * Statistics counters of the socket lists |
@@ -2080,7 +2080,7 @@ asmlinkage long sys_socketcall(int call, unsigned long __user *args) | |||
2080 | * socket interface. The value ops->family coresponds to the | 2080 | * socket interface. The value ops->family coresponds to the |
2081 | * socket system call protocol family. | 2081 | * socket system call protocol family. |
2082 | */ | 2082 | */ |
2083 | int sock_register(struct net_proto_family *ops) | 2083 | int sock_register(const struct net_proto_family *ops) |
2084 | { | 2084 | { |
2085 | int err; | 2085 | int err; |
2086 | 2086 | ||
@@ -2116,10 +2116,9 @@ int sock_register(struct net_proto_family *ops) | |||
2116 | * a module then it needs to provide its own protection in | 2116 | * a module then it needs to provide its own protection in |
2117 | * the ops->create routine. | 2117 | * the ops->create routine. |
2118 | */ | 2118 | */ |
2119 | int sock_unregister(int family) | 2119 | void sock_unregister(int family) |
2120 | { | 2120 | { |
2121 | if (family < 0 || family >= NPROTO) | 2121 | BUG_ON(family < 0 || family >= NPROTO); |
2122 | return -EINVAL; | ||
2123 | 2122 | ||
2124 | spin_lock(&net_family_lock); | 2123 | spin_lock(&net_family_lock); |
2125 | net_families[family] = NULL; | 2124 | net_families[family] = NULL; |
@@ -2128,7 +2127,6 @@ int sock_unregister(int family) | |||
2128 | synchronize_rcu(); | 2127 | synchronize_rcu(); |
2129 | 2128 | ||
2130 | printk(KERN_INFO "NET: Unregistered protocol family %d\n", family); | 2129 | printk(KERN_INFO "NET: Unregistered protocol family %d\n", family); |
2131 | return 0; | ||
2132 | } | 2130 | } |
2133 | 2131 | ||
2134 | static int __init sock_init(void) | 2132 | static int __init sock_init(void) |