Bluetooth: Update Adv monitor count upon removal
authorMiao-chen Chou <mcchou@chromium.org>
Fri, 18 Sep 2020 03:11:48 +0000 (11:11 +0800)
committerMarcel Holtmann <marcel@holtmann.org>
Sun, 20 Sep 2020 06:11:59 +0000 (08:11 +0200)
This fixes the count of Adv monitor upon monitor removal.

The following test was performed.
- Start two btmgmt consoles, issue a btmgmt advmon-remove command on one
console and observe a MGMT_EV_ADV_MONITOR_REMOVED event on the other.

Signed-off-by: Miao-chen Chou <mcchou@chromium.org>
Signed-off-by: Howard Chung <howardchung@google.com>
Reviewed-by: Alain Michaud <alainm@chromium.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/hci_core.c

index 8a2645a..f30a1f5 100644 (file)
@@ -3061,6 +3061,7 @@ static int free_adv_monitor(int id, void *ptr, void *data)
 
        idr_remove(&hdev->adv_monitors_idr, monitor->handle);
        hci_free_adv_monitor(monitor);
+       hdev->adv_monitors_cnt--;
 
        return 0;
 }
@@ -3077,6 +3078,7 @@ int hci_remove_adv_monitor(struct hci_dev *hdev, u16 handle)
 
                idr_remove(&hdev->adv_monitors_idr, monitor->handle);
                hci_free_adv_monitor(monitor);
+               hdev->adv_monitors_cnt--;
        } else {
                /* Remove all monitors if handle is 0. */
                idr_for_each(&hdev->adv_monitors_idr, &free_adv_monitor, hdev);