提交 a664b5bc 编写于 作者: J Johan Hedberg 提交者: Gustavo F. Padovan

Bluetooth: Fix unnecessary list traversal in mgmt_pending_remove

All of the places that need to call mgmt_pending_remove already have a
pointer to the pending command, so searching for the command in the list
doesn't make sense. The added benefit is that many places that
previously had to call list_del + mgmt_pending_free can just call
mgmt_pending_remove now.
Signed-off-by: NJohan Hedberg <johan.hedberg@nokia.com>
Signed-off-by: NGustavo F. Padovan <padovan@profusion.mobi>
上级 a9583556
...@@ -290,14 +290,8 @@ static struct pending_cmd *mgmt_pending_find(u16 opcode, int index) ...@@ -290,14 +290,8 @@ static struct pending_cmd *mgmt_pending_find(u16 opcode, int index)
return NULL; return NULL;
} }
static void mgmt_pending_remove(u16 opcode, int index) static void mgmt_pending_remove(struct pending_cmd *cmd)
{ {
struct pending_cmd *cmd;
cmd = mgmt_pending_find(opcode, index);
if (cmd == NULL)
return;
list_del(&cmd->list); list_del(&cmd->list);
mgmt_pending_free(cmd); mgmt_pending_free(cmd);
} }
...@@ -401,7 +395,7 @@ static int set_discoverable(struct sock *sk, unsigned char *data, u16 len) ...@@ -401,7 +395,7 @@ static int set_discoverable(struct sock *sk, unsigned char *data, u16 len)
err = hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan); err = hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
if (err < 0) if (err < 0)
mgmt_pending_remove(MGMT_OP_SET_DISCOVERABLE, dev_id); mgmt_pending_remove(cmd);
failed: failed:
hci_dev_unlock_bh(hdev); hci_dev_unlock_bh(hdev);
...@@ -459,7 +453,7 @@ static int set_connectable(struct sock *sk, unsigned char *data, u16 len) ...@@ -459,7 +453,7 @@ static int set_connectable(struct sock *sk, unsigned char *data, u16 len)
err = hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan); err = hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
if (err < 0) if (err < 0)
mgmt_pending_remove(MGMT_OP_SET_CONNECTABLE, dev_id); mgmt_pending_remove(cmd);
failed: failed:
hci_dev_unlock_bh(hdev); hci_dev_unlock_bh(hdev);
...@@ -881,7 +875,7 @@ static int disconnect(struct sock *sk, unsigned char *data, u16 len) ...@@ -881,7 +875,7 @@ static int disconnect(struct sock *sk, unsigned char *data, u16 len)
err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc); err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc);
if (err < 0) if (err < 0)
mgmt_pending_remove(MGMT_OP_DISCONNECT, dev_id); mgmt_pending_remove(cmd);
failed: failed:
hci_dev_unlock_bh(hdev); hci_dev_unlock_bh(hdev);
...@@ -983,7 +977,7 @@ static int pin_code_reply(struct sock *sk, unsigned char *data, u16 len) ...@@ -983,7 +977,7 @@ static int pin_code_reply(struct sock *sk, unsigned char *data, u16 len)
err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_REPLY, sizeof(reply), &reply); err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_REPLY, sizeof(reply), &reply);
if (err < 0) if (err < 0)
mgmt_pending_remove(MGMT_OP_PIN_CODE_REPLY, dev_id); mgmt_pending_remove(cmd);
failed: failed:
hci_dev_unlock_bh(hdev); hci_dev_unlock_bh(hdev);
...@@ -1026,7 +1020,7 @@ static int pin_code_neg_reply(struct sock *sk, unsigned char *data, u16 len) ...@@ -1026,7 +1020,7 @@ static int pin_code_neg_reply(struct sock *sk, unsigned char *data, u16 len)
err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY, sizeof(bdaddr_t), err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY, sizeof(bdaddr_t),
&cp->bdaddr); &cp->bdaddr);
if (err < 0) if (err < 0)
mgmt_pending_remove(MGMT_OP_PIN_CODE_NEG_REPLY, dev_id); mgmt_pending_remove(cmd);
failed: failed:
hci_dev_unlock_bh(hdev); hci_dev_unlock_bh(hdev);
...@@ -1107,8 +1101,7 @@ static void pairing_complete(struct pending_cmd *cmd, u8 status) ...@@ -1107,8 +1101,7 @@ static void pairing_complete(struct pending_cmd *cmd, u8 status)
hci_conn_put(conn); hci_conn_put(conn);
list_del(&cmd->list); mgmt_pending_remove(cmd);
mgmt_pending_free(cmd);
} }
static void pairing_complete_cb(struct hci_conn *conn, u8 status) static void pairing_complete_cb(struct hci_conn *conn, u8 status)
...@@ -1230,10 +1223,8 @@ static int user_confirm_reply(struct sock *sk, unsigned char *data, u16 len, ...@@ -1230,10 +1223,8 @@ static int user_confirm_reply(struct sock *sk, unsigned char *data, u16 len,
} }
err = hci_send_cmd(hdev, hci_op, sizeof(cp->bdaddr), &cp->bdaddr); err = hci_send_cmd(hdev, hci_op, sizeof(cp->bdaddr), &cp->bdaddr);
if (err < 0) { if (err < 0)
list_del(&cmd->list); mgmt_pending_remove(cmd);
mgmt_pending_free(cmd);
}
failed: failed:
hci_dev_unlock_bh(hdev); hci_dev_unlock_bh(hdev);
...@@ -1494,8 +1485,7 @@ static void disconnect_rsp(struct pending_cmd *cmd, void *data) ...@@ -1494,8 +1485,7 @@ static void disconnect_rsp(struct pending_cmd *cmd, void *data)
*sk = cmd->sk; *sk = cmd->sk;
sock_hold(*sk); sock_hold(*sk);
list_del(&cmd->list); mgmt_pending_remove(cmd);
mgmt_pending_free(cmd);
} }
int mgmt_disconnected(u16 index, bdaddr_t *bdaddr) int mgmt_disconnected(u16 index, bdaddr_t *bdaddr)
...@@ -1528,8 +1518,7 @@ int mgmt_disconnect_failed(u16 index) ...@@ -1528,8 +1518,7 @@ int mgmt_disconnect_failed(u16 index)
err = cmd_status(cmd->sk, MGMT_OP_DISCONNECT, EIO); err = cmd_status(cmd->sk, MGMT_OP_DISCONNECT, EIO);
list_del(&cmd->list); mgmt_pending_remove(cmd);
mgmt_pending_free(cmd);
return err; return err;
} }
...@@ -1571,8 +1560,7 @@ int mgmt_pin_code_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status) ...@@ -1571,8 +1560,7 @@ int mgmt_pin_code_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status)
err = cmd_complete(cmd->sk, MGMT_OP_PIN_CODE_REPLY, &rp, sizeof(rp)); err = cmd_complete(cmd->sk, MGMT_OP_PIN_CODE_REPLY, &rp, sizeof(rp));
list_del(&cmd->list); mgmt_pending_remove(cmd);
mgmt_pending_free(cmd);
return err; return err;
} }
...@@ -1594,8 +1582,7 @@ int mgmt_pin_code_neg_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status) ...@@ -1594,8 +1582,7 @@ int mgmt_pin_code_neg_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status)
err = cmd_complete(cmd->sk, MGMT_OP_PIN_CODE_NEG_REPLY, err = cmd_complete(cmd->sk, MGMT_OP_PIN_CODE_NEG_REPLY,
&rp, sizeof(rp)); &rp, sizeof(rp));
list_del(&cmd->list); mgmt_pending_remove(cmd);
mgmt_pending_free(cmd);
return err; return err;
} }
...@@ -1629,8 +1616,7 @@ static int confirm_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status, ...@@ -1629,8 +1616,7 @@ static int confirm_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status,
rp.status = status; rp.status = status;
err = cmd_complete(cmd->sk, opcode, &rp, sizeof(rp)); err = cmd_complete(cmd->sk, opcode, &rp, sizeof(rp));
list_del(&cmd->list); mgmt_pending_remove(cmd);
mgmt_pending_free(cmd);
return err; return err;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册