diff options
Diffstat (limited to 'net/bluetooth')
| -rw-r--r-- | net/bluetooth/bnep/core.c | 8 | ||||
| -rw-r--r-- | net/bluetooth/cmtp/core.c | 5 | ||||
| -rw-r--r-- | net/bluetooth/hci_event.c | 2 | 
3 files changed, 7 insertions, 8 deletions
diff --git a/net/bluetooth/bnep/core.c b/net/bluetooth/bnep/core.c index 91bcd3a961ec..1eea8208b2cc 100644 --- a/net/bluetooth/bnep/core.c +++ b/net/bluetooth/bnep/core.c @@ -79,17 +79,12 @@ static struct bnep_session *__bnep_get_session(u8 *dst)  static void __bnep_link_session(struct bnep_session *s)  { -	/* It's safe to call __module_get() here because sessions are added -	   by the socket layer which has to hold the reference to this module. -	 */ -	__module_get(THIS_MODULE);  	list_add(&s->list, &bnep_session_list);  }  static void __bnep_unlink_session(struct bnep_session *s)  {  	list_del(&s->list); -	module_put(THIS_MODULE);  }  static int bnep_send(struct bnep_session *s, void *data, size_t len) @@ -530,6 +525,7 @@ static int bnep_session(void *arg)  	up_write(&bnep_session_sem);  	free_netdev(dev); +	module_put_and_exit(0);  	return 0;  } @@ -616,9 +612,11 @@ int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)  	__bnep_link_session(s); +	__module_get(THIS_MODULE);  	s->task = kthread_run(bnep_session, s, "kbnepd %s", dev->name);  	if (IS_ERR(s->task)) {  		/* Session thread start failed, gotta cleanup. */ +		module_put(THIS_MODULE);  		unregister_netdev(dev);  		__bnep_unlink_session(s);  		err = PTR_ERR(s->task); diff --git a/net/bluetooth/cmtp/core.c b/net/bluetooth/cmtp/core.c index 7d00ddf9e9dc..5a6e634f7fca 100644 --- a/net/bluetooth/cmtp/core.c +++ b/net/bluetooth/cmtp/core.c @@ -67,14 +67,12 @@ static struct cmtp_session *__cmtp_get_session(bdaddr_t *bdaddr)  static void __cmtp_link_session(struct cmtp_session *session)  { -	__module_get(THIS_MODULE);  	list_add(&session->list, &cmtp_session_list);  }  static void __cmtp_unlink_session(struct cmtp_session *session)  {  	list_del(&session->list); -	module_put(THIS_MODULE);  }  static void __cmtp_copy_session(struct cmtp_session *session, struct cmtp_conninfo *ci) @@ -327,6 +325,7 @@ static int cmtp_session(void *arg)  	up_write(&cmtp_session_sem);  	kfree(session); +	module_put_and_exit(0);  	return 0;  } @@ -376,9 +375,11 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)  	__cmtp_link_session(session); +	__module_get(THIS_MODULE);  	session->task = kthread_run(cmtp_session, session, "kcmtpd_ctr_%d",  								session->num);  	if (IS_ERR(session->task)) { +		module_put(THIS_MODULE);  		err = PTR_ERR(session->task);  		goto unlink;  	} diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index d7d96b6b1f0d..643a41b76e2e 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c @@ -545,7 +545,7 @@ static void hci_setup(struct hci_dev *hdev)  {  	hci_setup_event_mask(hdev); -	if (hdev->lmp_ver > 1) +	if (hdev->hci_ver > 1)  		hci_send_cmd(hdev, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);  	if (hdev->features[6] & LMP_SIMPLE_PAIR) {  | 
