Bluetooth: Remove HCI_PI_MGMT_INIT flag for sockets
authorJohan Hedberg <johan.hedberg@intel.com>
Fri, 2 Mar 2012 17:55:56 +0000 (19:55 +0200)
committerJohan Hedberg <johan.hedberg@intel.com>
Fri, 2 Mar 2012 23:28:47 +0000 (01:28 +0200)
This flag is of no use right now and is in fact harmful in that it
prevents the HCI_MGMT flag to be set for any controllers that may need
it after the first one that bluetoothd takes into use (the flag is
cleared for the first controller so any subsequent ones through the same
bluetoothd mgmt socket never get the HCI_MGMT flag set).

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
include/net/bluetooth/hci_core.h
net/bluetooth/hci_sock.c
net/bluetooth/mgmt.c

index facd7ed32b74c857701c0041cc27154e8c099e3a..25cb0a15b57977ab2ce44c408b51a64e18c6818d 100644 (file)
@@ -1034,16 +1034,12 @@ int mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent);
 /* HCI info for socket */
 #define hci_pi(sk) ((struct hci_pinfo *) sk)
 
-/* HCI socket flags */
-#define HCI_PI_MGMT_INIT       0
-
 struct hci_pinfo {
        struct bt_sock    bt;
        struct hci_dev    *hdev;
        struct hci_filter filter;
        __u32             cmsg_mask;
        unsigned short   channel;
-       unsigned long     flags;
 };
 
 /* HCI security filter */
index 8a814bca00d71bc9f88601baa72d0517ccf4bc42..63afd234283e1af474dedffc0843caad1ad8d627 100644 (file)
@@ -659,7 +659,6 @@ static int hci_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_le
                        goto done;
                }
 
-               set_bit(HCI_PI_MGMT_INIT, &hci_pi(sk)->flags);
                break;
 
        case HCI_CHANNEL_MONITOR:
index fa9a5896427858e0e8fd6fcb7eeae5c98e0a75f0..4b1efedc18c5501d7c6cdcbf679cde686373b243 100644 (file)
@@ -615,19 +615,17 @@ static void service_cache_off(struct work_struct *work)
 
 static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev)
 {
-       if (!test_and_clear_bit(HCI_PI_MGMT_INIT, &hci_pi(sk)->flags))
+       if (test_and_set_bit(HCI_MGMT, &hdev->dev_flags))
                return;
 
-       if (!test_and_set_bit(HCI_MGMT, &hdev->dev_flags)) {
-               INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
+       INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
 
-               /* Non-mgmt controlled devices get this bit set
-                * implicitly so that pairing works for them, however
-                * for mgmt we require user-space to explicitly enable
-                * it
-                */
-               clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
-       }
+       /* Non-mgmt controlled devices get this bit set
+        * implicitly so that pairing works for them, however
+        * for mgmt we require user-space to explicitly enable
+        * it
+        */
+       clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
 }
 
 static int read_controller_info(struct sock *sk, struct hci_dev *hdev,