Bluetooth: Refactor ioctl scan state update to its own function
authorJohan Hedberg <johan.hedberg@intel.com>
Thu, 10 Jul 2014 09:09:07 +0000 (12:09 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 10 Jul 2014 09:14:20 +0000 (11:14 +0200)
With subsequent patches we'll also need to update the discoverable
state. As the code grows bigger it's better to move this out from the
switch statement into its own function.

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

index 3844eeb8545310f104e1f4a7e4560adbb125b0aa..27c40e4901a32cc6355d5ecf79d53d13822be3c2 100644 (file)
@@ -2655,6 +2655,26 @@ done:
        return ret;
 }
 
+static void hci_update_scan_state(struct hci_dev *hdev, u8 scan)
+{
+       bool conn_changed;
+
+       BT_DBG("%s scan 0x%02x", hdev->name, scan);
+
+       if ((scan & SCAN_PAGE))
+               conn_changed = !test_and_set_bit(HCI_CONNECTABLE,
+                                                &hdev->dev_flags);
+       else
+               conn_changed = test_and_clear_bit(HCI_CONNECTABLE,
+                                                 &hdev->dev_flags);
+
+       if (!test_bit(HCI_MGMT, &hdev->dev_flags))
+               return;
+
+       if (conn_changed)
+               mgmt_new_settings(hdev);
+}
+
 int hci_dev_cmd(unsigned int cmd, void __user *arg)
 {
        struct hci_dev *hdev;
@@ -2719,19 +2739,8 @@ int hci_dev_cmd(unsigned int cmd, void __user *arg)
                /* Ensure that the connectable state gets correctly
                 * modified as this was a non-mgmt change.
                 */
-               if (!err) {
-                       bool changed;
-
-                       if ((dr.dev_opt & SCAN_PAGE))
-                               changed = !test_and_set_bit(HCI_CONNECTABLE,
-                                                           &hdev->dev_flags);
-                       else
-                               changed = test_and_clear_bit(HCI_CONNECTABLE,
-                                                            &hdev->dev_flags);
-
-                       if (changed && test_bit(HCI_MGMT, &hdev->dev_flags))
-                               mgmt_new_settings(hdev);
-               }
+               if (!err)
+                       hci_update_scan_state(hdev, dr.dev_opt);
                break;
 
        case HCISETLINKPOL: