diff options
author | Masatake YAMATO <yamato@redhat.com> | 2012-07-25 12:27:35 -0400 |
---|---|---|
committer | Gustavo Padovan <gustavo.padovan@collabora.co.uk> | 2012-08-06 14:02:59 -0400 |
commit | 77cf5585a31fdad48c16ddae9be154f5afe22c1c (patch) | |
tree | 2ed950b1be081250f6c233ec25d2db51a1de3442 /net | |
parent | 256a06c8a85df676e80263af349daad1283e529e (diff) |
Bluetooth: Added /proc/net/bnep via bt_procfs_init()
Added /proc/net/bnep via bt_procfs_init().
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Diffstat (limited to 'net')
-rw-r--r-- | net/bluetooth/bnep/sock.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/net/bluetooth/bnep/sock.c b/net/bluetooth/bnep/sock.c index 5e5f5b410e0b..5b6cc0bf4dec 100644 --- a/net/bluetooth/bnep/sock.c +++ b/net/bluetooth/bnep/sock.c | |||
@@ -29,6 +29,10 @@ | |||
29 | 29 | ||
30 | #include "bnep.h" | 30 | #include "bnep.h" |
31 | 31 | ||
32 | static struct bt_sock_list bnep_sk_list = { | ||
33 | .lock = __RW_LOCK_UNLOCKED(bnep_sk_list.lock) | ||
34 | }; | ||
35 | |||
32 | static int bnep_sock_release(struct socket *sock) | 36 | static int bnep_sock_release(struct socket *sock) |
33 | { | 37 | { |
34 | struct sock *sk = sock->sk; | 38 | struct sock *sk = sock->sk; |
@@ -38,6 +42,8 @@ static int bnep_sock_release(struct socket *sock) | |||
38 | if (!sk) | 42 | if (!sk) |
39 | return 0; | 43 | return 0; |
40 | 44 | ||
45 | bt_sock_unlink(&bnep_sk_list, sk); | ||
46 | |||
41 | sock_orphan(sk); | 47 | sock_orphan(sk); |
42 | sock_put(sk); | 48 | sock_put(sk); |
43 | return 0; | 49 | return 0; |
@@ -204,6 +210,7 @@ static int bnep_sock_create(struct net *net, struct socket *sock, int protocol, | |||
204 | sk->sk_protocol = protocol; | 210 | sk->sk_protocol = protocol; |
205 | sk->sk_state = BT_OPEN; | 211 | sk->sk_state = BT_OPEN; |
206 | 212 | ||
213 | bt_sock_link(&bnep_sk_list, sk); | ||
207 | return 0; | 214 | return 0; |
208 | } | 215 | } |
209 | 216 | ||
@@ -222,19 +229,30 @@ int __init bnep_sock_init(void) | |||
222 | return err; | 229 | return err; |
223 | 230 | ||
224 | err = bt_sock_register(BTPROTO_BNEP, &bnep_sock_family_ops); | 231 | err = bt_sock_register(BTPROTO_BNEP, &bnep_sock_family_ops); |
225 | if (err < 0) | 232 | if (err < 0) { |
233 | BT_ERR("Can't register BNEP socket"); | ||
226 | goto error; | 234 | goto error; |
235 | } | ||
236 | |||
237 | err = bt_procfs_init(THIS_MODULE, &init_net, "bnep", &bnep_sk_list, NULL); | ||
238 | if (err < 0) { | ||
239 | BT_ERR("Failed to create BNEP proc file"); | ||
240 | bt_sock_unregister(BTPROTO_BNEP); | ||
241 | goto error; | ||
242 | } | ||
243 | |||
244 | BT_INFO("BNEP socket layer initialized"); | ||
227 | 245 | ||
228 | return 0; | 246 | return 0; |
229 | 247 | ||
230 | error: | 248 | error: |
231 | BT_ERR("Can't register BNEP socket"); | ||
232 | proto_unregister(&bnep_proto); | 249 | proto_unregister(&bnep_proto); |
233 | return err; | 250 | return err; |
234 | } | 251 | } |
235 | 252 | ||
236 | void __exit bnep_sock_cleanup(void) | 253 | void __exit bnep_sock_cleanup(void) |
237 | { | 254 | { |
255 | bt_procfs_cleanup(&init_net, "bnep"); | ||
238 | if (bt_sock_unregister(BTPROTO_BNEP) < 0) | 256 | if (bt_sock_unregister(BTPROTO_BNEP) < 0) |
239 | BT_ERR("Can't unregister BNEP socket"); | 257 | BT_ERR("Can't unregister BNEP socket"); |
240 | 258 | ||