diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index ed60d37ea6462320cec902acd6d6cbcc9b4374a9..0d3782ad9a5b905fe7c59e95cd0cc33ee66dd8b2 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -3726,15 +3726,8 @@ int hci_conn_params_set(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type, return 0; } -/* This function requires the caller holds hdev->lock */ -void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type) +static void hci_conn_params_free(struct hci_conn_params *params) { - struct hci_conn_params *params; - - params = hci_conn_params_lookup(hdev, addr, addr_type); - if (!params) - return; - if (params->conn) { hci_conn_drop(params->conn); hci_conn_put(params->conn); @@ -3743,6 +3736,18 @@ void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type) list_del(¶ms->action); list_del(¶ms->list); kfree(params); +} + +/* This function requires the caller holds hdev->lock */ +void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type) +{ + struct hci_conn_params *params; + + params = hci_conn_params_lookup(hdev, addr, addr_type); + if (!params) + return; + + hci_conn_params_free(params); hci_update_background_scan(hdev); @@ -3769,15 +3774,8 @@ void hci_conn_params_clear_all(struct hci_dev *hdev) { struct hci_conn_params *params, *tmp; - list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) { - if (params->conn) { - hci_conn_drop(params->conn); - hci_conn_put(params->conn); - } - list_del(¶ms->action); - list_del(¶ms->list); - kfree(params); - } + list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) + hci_conn_params_free(params); hci_update_background_scan(hdev);