diff options
Diffstat (limited to 'net/bluetooth/rfcomm')
| -rw-r--r-- | net/bluetooth/rfcomm/core.c | 27 | ||||
| -rw-r--r-- | net/bluetooth/rfcomm/sock.c | 2 |
2 files changed, 20 insertions, 9 deletions
diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index e50566ebf9f9..94b3388c188b 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c | |||
| @@ -2080,28 +2080,41 @@ static CLASS_ATTR(rfcomm_dlc, S_IRUGO, rfcomm_dlc_sysfs_show, NULL); | |||
| 2080 | /* ---- Initialization ---- */ | 2080 | /* ---- Initialization ---- */ |
| 2081 | static int __init rfcomm_init(void) | 2081 | static int __init rfcomm_init(void) |
| 2082 | { | 2082 | { |
| 2083 | int ret; | ||
| 2084 | |||
| 2083 | l2cap_load(); | 2085 | l2cap_load(); |
| 2084 | 2086 | ||
| 2085 | hci_register_cb(&rfcomm_cb); | 2087 | hci_register_cb(&rfcomm_cb); |
| 2086 | 2088 | ||
| 2087 | rfcomm_thread = kthread_run(rfcomm_run, NULL, "krfcommd"); | 2089 | rfcomm_thread = kthread_run(rfcomm_run, NULL, "krfcommd"); |
| 2088 | if (IS_ERR(rfcomm_thread)) { | 2090 | if (IS_ERR(rfcomm_thread)) { |
| 2089 | hci_unregister_cb(&rfcomm_cb); | 2091 | ret = PTR_ERR(rfcomm_thread); |
| 2090 | return PTR_ERR(rfcomm_thread); | 2092 | goto out_thread; |
| 2091 | } | 2093 | } |
| 2092 | 2094 | ||
| 2093 | if (class_create_file(bt_class, &class_attr_rfcomm_dlc) < 0) | 2095 | if (class_create_file(bt_class, &class_attr_rfcomm_dlc) < 0) |
| 2094 | BT_ERR("Failed to create RFCOMM info file"); | 2096 | BT_ERR("Failed to create RFCOMM info file"); |
| 2095 | 2097 | ||
| 2096 | rfcomm_init_sockets(); | 2098 | ret = rfcomm_init_ttys(); |
| 2099 | if (ret) | ||
| 2100 | goto out_tty; | ||
| 2097 | 2101 | ||
| 2098 | #ifdef CONFIG_BT_RFCOMM_TTY | 2102 | ret = rfcomm_init_sockets(); |
| 2099 | rfcomm_init_ttys(); | 2103 | if (ret) |
| 2100 | #endif | 2104 | goto out_sock; |
| 2101 | 2105 | ||
| 2102 | BT_INFO("RFCOMM ver %s", VERSION); | 2106 | BT_INFO("RFCOMM ver %s", VERSION); |
| 2103 | 2107 | ||
| 2104 | return 0; | 2108 | return 0; |
| 2109 | |||
| 2110 | out_sock: | ||
| 2111 | rfcomm_cleanup_ttys(); | ||
| 2112 | out_tty: | ||
| 2113 | kthread_stop(rfcomm_thread); | ||
| 2114 | out_thread: | ||
| 2115 | hci_unregister_cb(&rfcomm_cb); | ||
| 2116 | |||
| 2117 | return ret; | ||
| 2105 | } | 2118 | } |
| 2106 | 2119 | ||
| 2107 | static void __exit rfcomm_exit(void) | 2120 | static void __exit rfcomm_exit(void) |
| @@ -2112,9 +2125,7 @@ static void __exit rfcomm_exit(void) | |||
| 2112 | 2125 | ||
| 2113 | kthread_stop(rfcomm_thread); | 2126 | kthread_stop(rfcomm_thread); |
| 2114 | 2127 | ||
| 2115 | #ifdef CONFIG_BT_RFCOMM_TTY | ||
| 2116 | rfcomm_cleanup_ttys(); | 2128 | rfcomm_cleanup_ttys(); |
| 2117 | #endif | ||
| 2118 | 2129 | ||
| 2119 | rfcomm_cleanup_sockets(); | 2130 | rfcomm_cleanup_sockets(); |
| 2120 | } | 2131 | } |
diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c index 7f482784e9f7..0b85e8116859 100644 --- a/net/bluetooth/rfcomm/sock.c +++ b/net/bluetooth/rfcomm/sock.c | |||
| @@ -1132,7 +1132,7 @@ error: | |||
| 1132 | return err; | 1132 | return err; |
| 1133 | } | 1133 | } |
| 1134 | 1134 | ||
| 1135 | void __exit rfcomm_cleanup_sockets(void) | 1135 | void rfcomm_cleanup_sockets(void) |
| 1136 | { | 1136 | { |
| 1137 | class_remove_file(bt_class, &class_attr_rfcomm); | 1137 | class_remove_file(bt_class, &class_attr_rfcomm); |
| 1138 | 1138 | ||
