|
@@ -665,7 +665,8 @@ static int hci_sock_dev_event(struct notifier_block *this, unsigned long event,
|
|
/* Detach sockets from device */
|
|
/* Detach sockets from device */
|
|
read_lock(&hci_sk_list.lock);
|
|
read_lock(&hci_sk_list.lock);
|
|
sk_for_each(sk, node, &hci_sk_list.head) {
|
|
sk_for_each(sk, node, &hci_sk_list.head) {
|
|
- lock_sock(sk);
|
|
|
|
|
|
+ local_bh_disable();
|
|
|
|
+ bh_lock_sock_nested(sk);
|
|
if (hci_pi(sk)->hdev == hdev) {
|
|
if (hci_pi(sk)->hdev == hdev) {
|
|
hci_pi(sk)->hdev = NULL;
|
|
hci_pi(sk)->hdev = NULL;
|
|
sk->sk_err = EPIPE;
|
|
sk->sk_err = EPIPE;
|
|
@@ -674,7 +675,8 @@ static int hci_sock_dev_event(struct notifier_block *this, unsigned long event,
|
|
|
|
|
|
hci_dev_put(hdev);
|
|
hci_dev_put(hdev);
|
|
}
|
|
}
|
|
- release_sock(sk);
|
|
|
|
|
|
+ bh_unlock_sock(sk);
|
|
|
|
+ local_bh_enable();
|
|
}
|
|
}
|
|
read_unlock(&hci_sk_list.lock);
|
|
read_unlock(&hci_sk_list.lock);
|
|
}
|
|
}
|