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/bluetooth | |
| 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/bluetooth')
| -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 | ||
