diff options
-rw-r--r-- | include/net/bluetooth/hci_core.h | 4 | ||||
-rw-r--r-- | net/bluetooth/hci_sock.c | 1 | ||||
-rw-r--r-- | net/bluetooth/mgmt.c | 18 |
3 files changed, 8 insertions, 15 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index facd7ed32b74..25cb0a15b579 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -1034,16 +1034,12 @@ int mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent); | |||
1034 | /* HCI info for socket */ | 1034 | /* HCI info for socket */ |
1035 | #define hci_pi(sk) ((struct hci_pinfo *) sk) | 1035 | #define hci_pi(sk) ((struct hci_pinfo *) sk) |
1036 | 1036 | ||
1037 | /* HCI socket flags */ | ||
1038 | #define HCI_PI_MGMT_INIT 0 | ||
1039 | |||
1040 | struct hci_pinfo { | 1037 | struct hci_pinfo { |
1041 | struct bt_sock bt; | 1038 | struct bt_sock bt; |
1042 | struct hci_dev *hdev; | 1039 | struct hci_dev *hdev; |
1043 | struct hci_filter filter; | 1040 | struct hci_filter filter; |
1044 | __u32 cmsg_mask; | 1041 | __u32 cmsg_mask; |
1045 | unsigned short channel; | 1042 | unsigned short channel; |
1046 | unsigned long flags; | ||
1047 | }; | 1043 | }; |
1048 | 1044 | ||
1049 | /* HCI security filter */ | 1045 | /* HCI security filter */ |
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c index 8a814bca00d7..63afd234283e 100644 --- a/net/bluetooth/hci_sock.c +++ b/net/bluetooth/hci_sock.c | |||
@@ -659,7 +659,6 @@ static int hci_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_le | |||
659 | goto done; | 659 | goto done; |
660 | } | 660 | } |
661 | 661 | ||
662 | set_bit(HCI_PI_MGMT_INIT, &hci_pi(sk)->flags); | ||
663 | break; | 662 | break; |
664 | 663 | ||
665 | case HCI_CHANNEL_MONITOR: | 664 | case HCI_CHANNEL_MONITOR: |
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index fa9a58964278..4b1efedc18c5 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c | |||
@@ -615,19 +615,17 @@ static void service_cache_off(struct work_struct *work) | |||
615 | 615 | ||
616 | static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev) | 616 | static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev) |
617 | { | 617 | { |
618 | if (!test_and_clear_bit(HCI_PI_MGMT_INIT, &hci_pi(sk)->flags)) | 618 | if (test_and_set_bit(HCI_MGMT, &hdev->dev_flags)) |
619 | return; | 619 | return; |
620 | 620 | ||
621 | if (!test_and_set_bit(HCI_MGMT, &hdev->dev_flags)) { | 621 | INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off); |
622 | INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off); | ||
623 | 622 | ||
624 | /* Non-mgmt controlled devices get this bit set | 623 | /* Non-mgmt controlled devices get this bit set |
625 | * implicitly so that pairing works for them, however | 624 | * implicitly so that pairing works for them, however |
626 | * for mgmt we require user-space to explicitly enable | 625 | * for mgmt we require user-space to explicitly enable |
627 | * it | 626 | * it |
628 | */ | 627 | */ |
629 | clear_bit(HCI_PAIRABLE, &hdev->dev_flags); | 628 | clear_bit(HCI_PAIRABLE, &hdev->dev_flags); |
630 | } | ||
631 | } | 629 | } |
632 | 630 | ||
633 | static int read_controller_info(struct sock *sk, struct hci_dev *hdev, | 631 | static int read_controller_info(struct sock *sk, struct hci_dev *hdev, |