summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2014-12-05 11:45:23 +0100
committerJohan Hedberg <johan.hedberg@intel.com>2014-12-05 13:13:01 +0200
commitee3c3ca5ba2fdff10f3f71b4f9923807a0983564 (patch)
tree8424d397b11f8543c978288a97e9da281019f589
parent22078800c337cf374d58b63a5b1f670d470e6dbf (diff)
Bluetooth: Clear discovery filter before starting background scan
Currently the discovery filter information are only cleared when the actual discovery procedure has been stopped. To make sure that none of the filters interfere with the background scanning and its device found event reporting, clear the filter before starting background scanning. This means that the discovery filter is now cleared before either Start Discovery, Start Service Discovery or background scanning. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
-rw-r--r--net/bluetooth/hci_core.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 8b3f839ba826..523700eefdd1 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -2052,17 +2052,6 @@ void hci_discovery_set_state(struct hci_dev *hdev, int state)
case DISCOVERY_STOPPED:
hci_update_background_scan(hdev);
- /* Reset RSSI and UUID filters to ensure Start Discovery
- * and Start Service Discovery operate properly no matter
- * which one started the previous discovery.
- *
- * While the Start Discovery and Start Service Discovery
- * operations will set proper values for RSSI and UUID
- * count, it is important to actually free the allocated
- * list of UUIDs here.
- */
- hci_discovery_filter_clear(hdev);
-
if (old_state != DISCOVERY_STARTING)
mgmt_discovering(hdev, 0);
break;
@@ -5679,6 +5668,15 @@ void hci_update_background_scan(struct hci_dev *hdev)
if (hdev->discovery.state != DISCOVERY_STOPPED)
return;
+ /* Reset RSSI and UUID filters when starting background scanning
+ * since these filters are meant for service discovery only.
+ *
+ * The Start Discovery and Start Service Discovery operations
+ * ensure to set proper values for RSSI threshold and UUID
+ * filter list. So it is safe to just reset them here.
+ */
+ hci_discovery_filter_clear(hdev);
+
hci_req_init(&req, hdev);
if (list_empty(&hdev->pend_le_conns) &&