Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Bluetooth: Use SCO addresses from HCI connection directly

Instead of storing a pointer to the addresses for the HCI device
and HCI connection, use them directly. With the recent changes
to address tracking of HCI connections, this becomes simple.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>

authored by

Marcel Holtmann and committed by
Johan Hedberg
041987cf 65f53e98

+8 -15
-3
include/net/bluetooth/sco.h
··· 55 55 struct sco_conn { 56 56 struct hci_conn *hcon; 57 57 58 - bdaddr_t *dst; 59 - bdaddr_t *src; 60 - 61 58 spinlock_t lock; 62 59 struct sock *sk; 63 60
+8 -12
net/bluetooth/sco.c
··· 92 92 hcon->sco_data = conn; 93 93 conn->hcon = hcon; 94 94 95 - conn->src = &hdev->bdaddr; 96 - conn->dst = &hcon->dst; 97 - 98 95 if (hdev->sco_mtu > 0) 99 96 conn->mtu = hdev->sco_mtu; 100 97 else ··· 153 156 154 157 static int sco_connect(struct sock *sk) 155 158 { 156 - bdaddr_t *src = &bt_sk(sk)->src; 157 - bdaddr_t *dst = &bt_sk(sk)->dst; 158 159 struct sco_conn *conn; 159 160 struct hci_conn *hcon; 160 161 struct hci_dev *hdev; 161 162 int err, type; 162 163 163 - BT_DBG("%pMR -> %pMR", src, dst); 164 + BT_DBG("%pMR -> %pMR", &bt_sk(sk)->src, &bt_sk(sk)->dst); 164 165 165 - hdev = hci_get_route(dst, src); 166 + hdev = hci_get_route(&bt_sk(sk)->dst, &bt_sk(sk)->src); 166 167 if (!hdev) 167 168 return -EHOSTUNREACH; 168 169 ··· 177 182 goto done; 178 183 } 179 184 180 - hcon = hci_connect_sco(hdev, type, dst, sco_pi(sk)->setting); 185 + hcon = hci_connect_sco(hdev, type, &bt_sk(sk)->dst, 186 + sco_pi(sk)->setting); 181 187 if (IS_ERR(hcon)) { 182 188 err = PTR_ERR(hcon); 183 189 goto done; ··· 192 196 } 193 197 194 198 /* Update source addr of the socket */ 195 - bacpy(src, conn->src); 199 + bacpy(&bt_sk(sk)->src, &hcon->src); 196 200 197 201 err = sco_chan_add(conn, sk, NULL); 198 202 if (err) ··· 995 999 } else { 996 1000 sco_conn_lock(conn); 997 1001 998 - parent = sco_get_sock_listen(conn->src); 1002 + parent = sco_get_sock_listen(&conn->hcon->src); 999 1003 if (!parent) { 1000 1004 sco_conn_unlock(conn); 1001 1005 return; ··· 1013 1017 1014 1018 sco_sock_init(sk, parent); 1015 1019 1016 - bacpy(&bt_sk(sk)->src, conn->src); 1017 - bacpy(&bt_sk(sk)->dst, conn->dst); 1020 + bacpy(&bt_sk(sk)->src, &conn->hcon->src); 1021 + bacpy(&bt_sk(sk)->dst, &conn->hcon->dst); 1018 1022 1019 1023 hci_conn_hold(conn->hcon); 1020 1024 __sco_chan_add(conn, sk, parent);