mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 05:31:37 -04:00
Bluetooth: hci_sync: make hci_cmd_sync_run_once return -EEXIST if exists
hci_cmd_sync_run_once() needs to indicate whether a queue item was added, so caller can know if callbacks are called, so it can avoid leaking resources. Change the function to return -EEXIST if queue item already exists. Modify all callsites vs. the changes. The only callsite is hci_abort_conn(). Signed-off-by: Pauli Virtanen <pav@iki.fi> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
committed by
Luiz Augusto von Dentz
parent
7b75867803
commit
d288f4db09
@@ -3083,6 +3083,7 @@ static int abort_conn_sync(struct hci_dev *hdev, void *data)
|
||||
int hci_abort_conn(struct hci_conn *conn, u8 reason)
|
||||
{
|
||||
struct hci_dev *hdev = conn->hdev;
|
||||
int err;
|
||||
|
||||
/* If abort_reason has already been set it means the connection is
|
||||
* already being aborted so don't attempt to overwrite it.
|
||||
@@ -3119,7 +3120,8 @@ int hci_abort_conn(struct hci_conn *conn, u8 reason)
|
||||
* as a result to MGMT_OP_DISCONNECT/MGMT_OP_UNPAIR which does
|
||||
* already queue its callback on cmd_sync_work.
|
||||
*/
|
||||
return hci_cmd_sync_run_once(hdev, abort_conn_sync, conn, NULL);
|
||||
err = hci_cmd_sync_run_once(hdev, abort_conn_sync, conn, NULL);
|
||||
return (err == -EEXIST) ? 0 : err;
|
||||
}
|
||||
|
||||
void hci_setup_tx_timestamp(struct sk_buff *skb, size_t key_offset,
|
||||
|
||||
@@ -825,7 +825,7 @@ int hci_cmd_sync_run_once(struct hci_dev *hdev, hci_cmd_sync_work_func_t func,
|
||||
void *data, hci_cmd_sync_work_destroy_t destroy)
|
||||
{
|
||||
if (hci_cmd_sync_lookup_entry(hdev, func, data, destroy))
|
||||
return 0;
|
||||
return -EEXIST;
|
||||
|
||||
return hci_cmd_sync_run(hdev, func, data, destroy);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user