aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustavo F. Padovan <padovan@profusion.mobi>2011-04-13 18:50:45 -0400
committerGustavo F. Padovan <padovan@profusion.mobi>2011-04-28 00:09:59 -0400
commitfe4128e0aabc3c748786c00da21e6eff9d3aeddb (patch)
tree6b62853c721023e6a05fdbbc0c806414632ef984
parent0c1bc5c626e9783034264ccca4b262b3acc628f1 (diff)
Bluetooth: Move more vars to struct l2cap_chan
In this commit, psm, scid and dcid. Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
-rw-r--r--include/net/bluetooth/l2cap.h10
-rw-r--r--net/bluetooth/l2cap_core.c116
-rw-r--r--net/bluetooth/l2cap_sock.c26
3 files changed, 77 insertions, 75 deletions
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index 7522835c24ee..fd199cda752c 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -284,6 +284,9 @@ struct srej_list {
284 284
285struct l2cap_chan { 285struct l2cap_chan {
286 struct sock *sk; 286 struct sock *sk;
287 __le16 psm;
288 __u16 dcid;
289 __u16 scid;
287 290
288 __u16 imtu; 291 __u16 imtu;
289 __u16 omtu; 292 __u16 omtu;
@@ -382,9 +385,6 @@ struct l2cap_conn {
382 385
383struct l2cap_pinfo { 386struct l2cap_pinfo {
384 struct bt_sock bt; 387 struct bt_sock bt;
385 __le16 psm;
386 __u16 dcid;
387 __u16 scid;
388 388
389 struct l2cap_conn *conn; 389 struct l2cap_conn *conn;
390 struct l2cap_chan *chan; 390 struct l2cap_chan *chan;
@@ -450,8 +450,8 @@ void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *d
450void __l2cap_connect_rsp_defer(struct sock *sk); 450void __l2cap_connect_rsp_defer(struct sock *sk);
451int __l2cap_wait_ack(struct sock *sk); 451int __l2cap_wait_ack(struct sock *sk);
452 452
453struct sk_buff *l2cap_create_connless_pdu(struct sock *sk, struct msghdr *msg, size_t len); 453struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
454struct sk_buff *l2cap_create_basic_pdu(struct sock *sk, struct msghdr *msg, size_t len); 454struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
455struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len, u16 control, u16 sdulen); 455struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len, u16 control, u16 sdulen);
456int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len); 456int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
457void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb); 457void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb);
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 7b06375d05a7..dd726bdd6e02 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -80,8 +80,7 @@ static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, u16
80 struct l2cap_chan *c; 80 struct l2cap_chan *c;
81 81
82 list_for_each_entry(c, &conn->chan_l, list) { 82 list_for_each_entry(c, &conn->chan_l, list) {
83 struct sock *s = c->sk; 83 if (c->dcid == cid)
84 if (l2cap_pi(s)->dcid == cid)
85 return c; 84 return c;
86 } 85 }
87 return NULL; 86 return NULL;
@@ -93,8 +92,7 @@ static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16
93 struct l2cap_chan *c; 92 struct l2cap_chan *c;
94 93
95 list_for_each_entry(c, &conn->chan_l, list) { 94 list_for_each_entry(c, &conn->chan_l, list) {
96 struct sock *s = c->sk; 95 if (c->scid == cid)
97 if (l2cap_pi(s)->scid == cid)
98 return c; 96 return c;
99 } 97 }
100 return NULL; 98 return NULL;
@@ -167,7 +165,7 @@ static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
167 struct sock *sk = chan->sk; 165 struct sock *sk = chan->sk;
168 166
169 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn, 167 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
170 l2cap_pi(sk)->psm, l2cap_pi(sk)->dcid); 168 chan->psm, chan->dcid);
171 169
172 conn->disc_reason = 0x13; 170 conn->disc_reason = 0x13;
173 171
@@ -177,22 +175,22 @@ static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
177 if (conn->hcon->type == LE_LINK) { 175 if (conn->hcon->type == LE_LINK) {
178 /* LE connection */ 176 /* LE connection */
179 chan->omtu = L2CAP_LE_DEFAULT_MTU; 177 chan->omtu = L2CAP_LE_DEFAULT_MTU;
180 l2cap_pi(sk)->scid = L2CAP_CID_LE_DATA; 178 chan->scid = L2CAP_CID_LE_DATA;
181 l2cap_pi(sk)->dcid = L2CAP_CID_LE_DATA; 179 chan->dcid = L2CAP_CID_LE_DATA;
182 } else { 180 } else {
183 /* Alloc CID for connection-oriented socket */ 181 /* Alloc CID for connection-oriented socket */
184 l2cap_pi(sk)->scid = l2cap_alloc_cid(conn); 182 chan->scid = l2cap_alloc_cid(conn);
185 chan->omtu = L2CAP_DEFAULT_MTU; 183 chan->omtu = L2CAP_DEFAULT_MTU;
186 } 184 }
187 } else if (sk->sk_type == SOCK_DGRAM) { 185 } else if (sk->sk_type == SOCK_DGRAM) {
188 /* Connectionless socket */ 186 /* Connectionless socket */
189 l2cap_pi(sk)->scid = L2CAP_CID_CONN_LESS; 187 chan->scid = L2CAP_CID_CONN_LESS;
190 l2cap_pi(sk)->dcid = L2CAP_CID_CONN_LESS; 188 chan->dcid = L2CAP_CID_CONN_LESS;
191 chan->omtu = L2CAP_DEFAULT_MTU; 189 chan->omtu = L2CAP_DEFAULT_MTU;
192 } else { 190 } else {
193 /* Raw socket can send/recv signalling messages only */ 191 /* Raw socket can send/recv signalling messages only */
194 l2cap_pi(sk)->scid = L2CAP_CID_SIGNALING; 192 chan->scid = L2CAP_CID_SIGNALING;
195 l2cap_pi(sk)->dcid = L2CAP_CID_SIGNALING; 193 chan->dcid = L2CAP_CID_SIGNALING;
196 chan->omtu = L2CAP_DEFAULT_MTU; 194 chan->omtu = L2CAP_DEFAULT_MTU;
197 } 195 }
198 196
@@ -275,7 +273,7 @@ static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
275 default: 273 default:
276 return HCI_AT_NO_BONDING; 274 return HCI_AT_NO_BONDING;
277 } 275 }
278 } else if (l2cap_pi(sk)->psm == cpu_to_le16(0x0001)) { 276 } else if (chan->psm == cpu_to_le16(0x0001)) {
279 if (chan->sec_level == BT_SECURITY_LOW) 277 if (chan->sec_level == BT_SECURITY_LOW)
280 chan->sec_level = BT_SECURITY_SDP; 278 chan->sec_level = BT_SECURITY_SDP;
281 279
@@ -383,7 +381,7 @@ static inline void l2cap_send_sframe(struct l2cap_chan *chan, u16 control)
383 381
384 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE); 382 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
385 lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE); 383 lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
386 lh->cid = cpu_to_le16(pi->dcid); 384 lh->cid = cpu_to_le16(chan->dcid);
387 put_unaligned_le16(control, skb_put(skb, 2)); 385 put_unaligned_le16(control, skb_put(skb, 2));
388 386
389 if (chan->fcs == L2CAP_FCS_CRC16) { 387 if (chan->fcs == L2CAP_FCS_CRC16) {
@@ -429,8 +427,8 @@ static void l2cap_do_start(struct l2cap_chan *chan)
429 if (l2cap_check_security(chan) && 427 if (l2cap_check_security(chan) &&
430 __l2cap_no_conn_pending(chan)) { 428 __l2cap_no_conn_pending(chan)) {
431 struct l2cap_conn_req req; 429 struct l2cap_conn_req req;
432 req.scid = cpu_to_le16(l2cap_pi(sk)->scid); 430 req.scid = cpu_to_le16(chan->scid);
433 req.psm = l2cap_pi(sk)->psm; 431 req.psm = chan->psm;
434 432
435 chan->ident = l2cap_get_ident(conn); 433 chan->ident = l2cap_get_ident(conn);
436 chan->conf_state |= L2CAP_CONF_CONNECT_PEND; 434 chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
@@ -485,8 +483,8 @@ void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, in
485 del_timer(&chan->ack_timer); 483 del_timer(&chan->ack_timer);
486 } 484 }
487 485
488 req.dcid = cpu_to_le16(l2cap_pi(sk)->dcid); 486 req.dcid = cpu_to_le16(chan->dcid);
489 req.scid = cpu_to_le16(l2cap_pi(sk)->scid); 487 req.scid = cpu_to_le16(chan->scid);
490 l2cap_send_cmd(conn, l2cap_get_ident(conn), 488 l2cap_send_cmd(conn, l2cap_get_ident(conn),
491 L2CAP_DISCONN_REQ, sizeof(req), &req); 489 L2CAP_DISCONN_REQ, sizeof(req), &req);
492 490
@@ -536,8 +534,8 @@ static void l2cap_conn_start(struct l2cap_conn *conn)
536 continue; 534 continue;
537 } 535 }
538 536
539 req.scid = cpu_to_le16(l2cap_pi(sk)->scid); 537 req.scid = cpu_to_le16(chan->scid);
540 req.psm = l2cap_pi(sk)->psm; 538 req.psm = chan->psm;
541 539
542 chan->ident = l2cap_get_ident(conn); 540 chan->ident = l2cap_get_ident(conn);
543 chan->conf_state |= L2CAP_CONF_CONNECT_PEND; 541 chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
@@ -548,8 +546,8 @@ static void l2cap_conn_start(struct l2cap_conn *conn)
548 } else if (sk->sk_state == BT_CONNECT2) { 546 } else if (sk->sk_state == BT_CONNECT2) {
549 struct l2cap_conn_rsp rsp; 547 struct l2cap_conn_rsp rsp;
550 char buf[128]; 548 char buf[128];
551 rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid); 549 rsp.scid = cpu_to_le16(chan->dcid);
552 rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid); 550 rsp.dcid = cpu_to_le16(chan->scid);
553 551
554 if (l2cap_check_security(chan)) { 552 if (l2cap_check_security(chan)) {
555 if (bt_sk(sk)->defer_setup) { 553 if (bt_sk(sk)->defer_setup) {
@@ -600,10 +598,12 @@ static struct sock *l2cap_get_sock_by_scid(int state, __le16 cid, bdaddr_t *src)
600 read_lock(&l2cap_sk_list.lock); 598 read_lock(&l2cap_sk_list.lock);
601 599
602 sk_for_each(sk, node, &l2cap_sk_list.head) { 600 sk_for_each(sk, node, &l2cap_sk_list.head) {
601 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
602
603 if (state && sk->sk_state != state) 603 if (state && sk->sk_state != state)
604 continue; 604 continue;
605 605
606 if (l2cap_pi(sk)->scid == cid) { 606 if (chan->scid == cid) {
607 /* Exact match. */ 607 /* Exact match. */
608 if (!bacmp(&bt_sk(sk)->src, src)) 608 if (!bacmp(&bt_sk(sk)->src, src))
609 break; 609 break;
@@ -830,10 +830,12 @@ static struct sock *l2cap_get_sock_by_psm(int state, __le16 psm, bdaddr_t *src)
830 read_lock(&l2cap_sk_list.lock); 830 read_lock(&l2cap_sk_list.lock);
831 831
832 sk_for_each(sk, node, &l2cap_sk_list.head) { 832 sk_for_each(sk, node, &l2cap_sk_list.head) {
833 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
834
833 if (state && sk->sk_state != state) 835 if (state && sk->sk_state != state)
834 continue; 836 continue;
835 837
836 if (l2cap_pi(sk)->psm == psm) { 838 if (chan->psm == psm) {
837 /* Exact match. */ 839 /* Exact match. */
838 if (!bacmp(&bt_sk(sk)->src, src)) 840 if (!bacmp(&bt_sk(sk)->src, src))
839 break; 841 break;
@@ -861,7 +863,7 @@ int l2cap_chan_connect(struct l2cap_chan *chan)
861 int err; 863 int err;
862 864
863 BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), 865 BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst),
864 l2cap_pi(sk)->psm); 866 chan->psm);
865 867
866 hdev = hci_get_route(dst, src); 868 hdev = hci_get_route(dst, src);
867 if (!hdev) 869 if (!hdev)
@@ -871,7 +873,7 @@ int l2cap_chan_connect(struct l2cap_chan *chan)
871 873
872 auth_type = l2cap_get_auth_type(chan); 874 auth_type = l2cap_get_auth_type(chan);
873 875
874 if (l2cap_pi(sk)->dcid == L2CAP_CID_LE_DATA) 876 if (chan->dcid == L2CAP_CID_LE_DATA)
875 hcon = hci_connect(hdev, LE_LINK, dst, 877 hcon = hci_connect(hdev, LE_LINK, dst,
876 chan->sec_level, auth_type); 878 chan->sec_level, auth_type);
877 else 879 else
@@ -1231,8 +1233,9 @@ static inline int l2cap_skbuff_fromiovec(struct sock *sk, struct msghdr *msg, in
1231 return sent; 1233 return sent;
1232} 1234}
1233 1235
1234struct sk_buff *l2cap_create_connless_pdu(struct sock *sk, struct msghdr *msg, size_t len) 1236struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1235{ 1237{
1238 struct sock *sk = chan->sk;
1236 struct l2cap_conn *conn = l2cap_pi(sk)->conn; 1239 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1237 struct sk_buff *skb; 1240 struct sk_buff *skb;
1238 int err, count, hlen = L2CAP_HDR_SIZE + 2; 1241 int err, count, hlen = L2CAP_HDR_SIZE + 2;
@@ -1248,9 +1251,9 @@ struct sk_buff *l2cap_create_connless_pdu(struct sock *sk, struct msghdr *msg, s
1248 1251
1249 /* Create L2CAP header */ 1252 /* Create L2CAP header */
1250 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE); 1253 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1251 lh->cid = cpu_to_le16(l2cap_pi(sk)->dcid); 1254 lh->cid = cpu_to_le16(chan->dcid);
1252 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE)); 1255 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1253 put_unaligned_le16(l2cap_pi(sk)->psm, skb_put(skb, 2)); 1256 put_unaligned_le16(chan->psm, skb_put(skb, 2));
1254 1257
1255 err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb); 1258 err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1256 if (unlikely(err < 0)) { 1259 if (unlikely(err < 0)) {
@@ -1260,8 +1263,9 @@ struct sk_buff *l2cap_create_connless_pdu(struct sock *sk, struct msghdr *msg, s
1260 return skb; 1263 return skb;
1261} 1264}
1262 1265
1263struct sk_buff *l2cap_create_basic_pdu(struct sock *sk, struct msghdr *msg, size_t len) 1266struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1264{ 1267{
1268 struct sock *sk = chan->sk;
1265 struct l2cap_conn *conn = l2cap_pi(sk)->conn; 1269 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1266 struct sk_buff *skb; 1270 struct sk_buff *skb;
1267 int err, count, hlen = L2CAP_HDR_SIZE; 1271 int err, count, hlen = L2CAP_HDR_SIZE;
@@ -1277,7 +1281,7 @@ struct sk_buff *l2cap_create_basic_pdu(struct sock *sk, struct msghdr *msg, size
1277 1281
1278 /* Create L2CAP header */ 1282 /* Create L2CAP header */
1279 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE); 1283 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1280 lh->cid = cpu_to_le16(l2cap_pi(sk)->dcid); 1284 lh->cid = cpu_to_le16(chan->dcid);
1281 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE)); 1285 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1282 1286
1283 err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb); 1287 err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
@@ -1315,7 +1319,7 @@ struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan, struct msghdr *
1315 1319
1316 /* Create L2CAP header */ 1320 /* Create L2CAP header */
1317 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE); 1321 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1318 lh->cid = cpu_to_le16(l2cap_pi(sk)->dcid); 1322 lh->cid = cpu_to_le16(chan->dcid);
1319 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE)); 1323 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1320 put_unaligned_le16(control, skb_put(skb, 2)); 1324 put_unaligned_le16(control, skb_put(skb, 2));
1321 if (sdulen) 1325 if (sdulen)
@@ -1697,7 +1701,7 @@ done:
1697 break; 1701 break;
1698 } 1702 }
1699 1703
1700 req->dcid = cpu_to_le16(pi->dcid); 1704 req->dcid = cpu_to_le16(chan->dcid);
1701 req->flags = cpu_to_le16(0); 1705 req->flags = cpu_to_le16(0);
1702 1706
1703 return ptr - data; 1707 return ptr - data;
@@ -1850,7 +1854,7 @@ done:
1850 if (result == L2CAP_CONF_SUCCESS) 1854 if (result == L2CAP_CONF_SUCCESS)
1851 chan->conf_state |= L2CAP_CONF_OUTPUT_DONE; 1855 chan->conf_state |= L2CAP_CONF_OUTPUT_DONE;
1852 } 1856 }
1853 rsp->scid = cpu_to_le16(pi->dcid); 1857 rsp->scid = cpu_to_le16(chan->dcid);
1854 rsp->result = cpu_to_le16(result); 1858 rsp->result = cpu_to_le16(result);
1855 rsp->flags = cpu_to_le16(0x0000); 1859 rsp->flags = cpu_to_le16(0x0000);
1856 1860
@@ -1859,15 +1863,13 @@ done:
1859 1863
1860static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result) 1864static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
1861{ 1865{
1862 struct sock *sk = chan->sk;
1863 struct l2cap_pinfo *pi = l2cap_pi(sk);
1864 struct l2cap_conf_req *req = data; 1866 struct l2cap_conf_req *req = data;
1865 void *ptr = req->data; 1867 void *ptr = req->data;
1866 int type, olen; 1868 int type, olen;
1867 unsigned long val; 1869 unsigned long val;
1868 struct l2cap_conf_rfc rfc; 1870 struct l2cap_conf_rfc rfc;
1869 1871
1870 BT_DBG("sk %p, rsp %p, len %d, req %p", sk, rsp, len, data); 1872 BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
1871 1873
1872 while (len >= L2CAP_CONF_OPT_SIZE) { 1874 while (len >= L2CAP_CONF_OPT_SIZE) {
1873 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val); 1875 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
@@ -1921,20 +1923,20 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, voi
1921 } 1923 }
1922 } 1924 }
1923 1925
1924 req->dcid = cpu_to_le16(pi->dcid); 1926 req->dcid = cpu_to_le16(chan->dcid);
1925 req->flags = cpu_to_le16(0x0000); 1927 req->flags = cpu_to_le16(0x0000);
1926 1928
1927 return ptr - data; 1929 return ptr - data;
1928} 1930}
1929 1931
1930static int l2cap_build_conf_rsp(struct sock *sk, void *data, u16 result, u16 flags) 1932static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
1931{ 1933{
1932 struct l2cap_conf_rsp *rsp = data; 1934 struct l2cap_conf_rsp *rsp = data;
1933 void *ptr = rsp->data; 1935 void *ptr = rsp->data;
1934 1936
1935 BT_DBG("sk %p", sk); 1937 BT_DBG("chan %p", chan);
1936 1938
1937 rsp->scid = cpu_to_le16(l2cap_pi(sk)->dcid); 1939 rsp->scid = cpu_to_le16(chan->dcid);
1938 rsp->result = cpu_to_le16(result); 1940 rsp->result = cpu_to_le16(result);
1939 rsp->flags = cpu_to_le16(flags); 1941 rsp->flags = cpu_to_le16(flags);
1940 1942
@@ -1950,8 +1952,8 @@ void __l2cap_connect_rsp_defer(struct sock *sk)
1950 1952
1951 sk->sk_state = BT_CONFIG; 1953 sk->sk_state = BT_CONFIG;
1952 1954
1953 rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid); 1955 rsp.scid = cpu_to_le16(chan->dcid);
1954 rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid); 1956 rsp.dcid = cpu_to_le16(chan->scid);
1955 rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS); 1957 rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
1956 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO); 1958 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
1957 l2cap_send_cmd(conn, chan->ident, 1959 l2cap_send_cmd(conn, chan->ident,
@@ -2085,14 +2087,14 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd
2085 l2cap_sock_init(sk, parent); 2087 l2cap_sock_init(sk, parent);
2086 bacpy(&bt_sk(sk)->src, conn->src); 2088 bacpy(&bt_sk(sk)->src, conn->src);
2087 bacpy(&bt_sk(sk)->dst, conn->dst); 2089 bacpy(&bt_sk(sk)->dst, conn->dst);
2088 l2cap_pi(sk)->psm = psm; 2090 chan->psm = psm;
2089 l2cap_pi(sk)->dcid = scid; 2091 chan->dcid = scid;
2090 2092
2091 bt_accept_enqueue(parent, sk); 2093 bt_accept_enqueue(parent, sk);
2092 2094
2093 __l2cap_chan_add(conn, chan); 2095 __l2cap_chan_add(conn, chan);
2094 2096
2095 dcid = l2cap_pi(sk)->scid; 2097 dcid = chan->scid;
2096 2098
2097 l2cap_sock_set_timer(sk, sk->sk_sndtimeo); 2099 l2cap_sock_set_timer(sk, sk->sk_sndtimeo);
2098 2100
@@ -2190,7 +2192,7 @@ static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hd
2190 case L2CAP_CR_SUCCESS: 2192 case L2CAP_CR_SUCCESS:
2191 sk->sk_state = BT_CONFIG; 2193 sk->sk_state = BT_CONFIG;
2192 chan->ident = 0; 2194 chan->ident = 0;
2193 l2cap_pi(sk)->dcid = dcid; 2195 chan->dcid = dcid;
2194 chan->conf_state &= ~L2CAP_CONF_CONNECT_PEND; 2196 chan->conf_state &= ~L2CAP_CONF_CONNECT_PEND;
2195 2197
2196 if (chan->conf_state & L2CAP_CONF_REQ_SENT) 2198 if (chan->conf_state & L2CAP_CONF_REQ_SENT)
@@ -2270,7 +2272,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr
2270 len = cmd_len - sizeof(*req); 2272 len = cmd_len - sizeof(*req);
2271 if (chan->conf_len + len > sizeof(chan->conf_req)) { 2273 if (chan->conf_len + len > sizeof(chan->conf_req)) {
2272 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, 2274 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2273 l2cap_build_conf_rsp(sk, rsp, 2275 l2cap_build_conf_rsp(chan, rsp,
2274 L2CAP_CONF_REJECT, flags), rsp); 2276 L2CAP_CONF_REJECT, flags), rsp);
2275 goto unlock; 2277 goto unlock;
2276 } 2278 }
@@ -2282,7 +2284,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr
2282 if (flags & 0x0001) { 2284 if (flags & 0x0001) {
2283 /* Incomplete config. Send empty response. */ 2285 /* Incomplete config. Send empty response. */
2284 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, 2286 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2285 l2cap_build_conf_rsp(sk, rsp, 2287 l2cap_build_conf_rsp(chan, rsp,
2286 L2CAP_CONF_SUCCESS, 0x0001), rsp); 2288 L2CAP_CONF_SUCCESS, 0x0001), rsp);
2287 goto unlock; 2289 goto unlock;
2288 } 2290 }
@@ -2432,8 +2434,8 @@ static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd
2432 2434
2433 sk = chan->sk; 2435 sk = chan->sk;
2434 2436
2435 rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid); 2437 rsp.dcid = cpu_to_le16(chan->scid);
2436 rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid); 2438 rsp.scid = cpu_to_le16(chan->dcid);
2437 l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp); 2439 l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
2438 2440
2439 sk->sk_shutdown = SHUTDOWN_MASK; 2441 sk->sk_shutdown = SHUTDOWN_MASK;
@@ -3920,8 +3922,8 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
3920 if (sk->sk_state == BT_CONNECT) { 3922 if (sk->sk_state == BT_CONNECT) {
3921 if (!status) { 3923 if (!status) {
3922 struct l2cap_conn_req req; 3924 struct l2cap_conn_req req;
3923 req.scid = cpu_to_le16(l2cap_pi(sk)->scid); 3925 req.scid = cpu_to_le16(chan->scid);
3924 req.psm = l2cap_pi(sk)->psm; 3926 req.psm = chan->psm;
3925 3927
3926 chan->ident = l2cap_get_ident(conn); 3928 chan->ident = l2cap_get_ident(conn);
3927 chan->conf_state |= L2CAP_CONF_CONNECT_PEND; 3929 chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
@@ -3945,8 +3947,8 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
3945 result = L2CAP_CR_SEC_BLOCK; 3947 result = L2CAP_CR_SEC_BLOCK;
3946 } 3948 }
3947 3949
3948 rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid); 3950 rsp.scid = cpu_to_le16(chan->dcid);
3949 rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid); 3951 rsp.dcid = cpu_to_le16(chan->scid);
3950 rsp.result = cpu_to_le16(result); 3952 rsp.result = cpu_to_le16(result);
3951 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO); 3953 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
3952 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, 3954 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
@@ -4086,8 +4088,8 @@ static int l2cap_debugfs_show(struct seq_file *f, void *p)
4086 seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n", 4088 seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4087 batostr(&bt_sk(sk)->src), 4089 batostr(&bt_sk(sk)->src),
4088 batostr(&bt_sk(sk)->dst), 4090 batostr(&bt_sk(sk)->dst),
4089 sk->sk_state, __le16_to_cpu(pi->psm), 4091 sk->sk_state, __le16_to_cpu(chan->psm),
4090 pi->scid, pi->dcid, 4092 chan->scid, chan->dcid,
4091 chan->imtu, chan->omtu, chan->sec_level, 4093 chan->imtu, chan->omtu, chan->sec_level,
4092 chan->mode); 4094 chan->mode);
4093 } 4095 }
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index eef33b179f02..f5a27737c151 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -141,7 +141,7 @@ static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
141 } else { 141 } else {
142 /* Save source address */ 142 /* Save source address */
143 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr); 143 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
144 l2cap_pi(sk)->psm = la.l2_psm; 144 chan->psm = la.l2_psm;
145 chan->sport = la.l2_psm; 145 chan->sport = la.l2_psm;
146 sk->sk_state = BT_BOUND; 146 sk->sk_state = BT_BOUND;
147 147
@@ -151,7 +151,7 @@ static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
151 } 151 }
152 152
153 if (la.l2_cid) 153 if (la.l2_cid)
154 l2cap_pi(sk)->scid = la.l2_cid; 154 chan->scid = la.l2_cid;
155 155
156 write_unlock_bh(&l2cap_sk_list.lock); 156 write_unlock_bh(&l2cap_sk_list.lock);
157 157
@@ -232,8 +232,8 @@ static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int al
232 232
233 /* Set destination address and psm */ 233 /* Set destination address and psm */
234 bacpy(&bt_sk(sk)->dst, &la.l2_bdaddr); 234 bacpy(&bt_sk(sk)->dst, &la.l2_bdaddr);
235 l2cap_pi(sk)->psm = la.l2_psm; 235 chan->psm = la.l2_psm;
236 l2cap_pi(sk)->dcid = la.l2_cid; 236 chan->dcid = la.l2_cid;
237 237
238 err = l2cap_chan_connect(l2cap_pi(sk)->chan); 238 err = l2cap_chan_connect(l2cap_pi(sk)->chan);
239 if (err) 239 if (err)
@@ -276,7 +276,7 @@ static int l2cap_sock_listen(struct socket *sock, int backlog)
276 goto done; 276 goto done;
277 } 277 }
278 278
279 if (!l2cap_pi(sk)->psm && !l2cap_pi(sk)->scid) { 279 if (!chan->psm && !chan->scid) {
280 bdaddr_t *src = &bt_sk(sk)->src; 280 bdaddr_t *src = &bt_sk(sk)->src;
281 u16 psm; 281 u16 psm;
282 282
@@ -286,7 +286,7 @@ static int l2cap_sock_listen(struct socket *sock, int backlog)
286 286
287 for (psm = 0x1001; psm < 0x1100; psm += 2) 287 for (psm = 0x1001; psm < 0x1100; psm += 2)
288 if (!__l2cap_get_sock_by_addr(cpu_to_le16(psm), src)) { 288 if (!__l2cap_get_sock_by_addr(cpu_to_le16(psm), src)) {
289 l2cap_pi(sk)->psm = cpu_to_le16(psm); 289 chan->psm = cpu_to_le16(psm);
290 chan->sport = cpu_to_le16(psm); 290 chan->sport = cpu_to_le16(psm);
291 err = 0; 291 err = 0;
292 break; 292 break;
@@ -375,13 +375,13 @@ static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *l
375 *len = sizeof(struct sockaddr_l2); 375 *len = sizeof(struct sockaddr_l2);
376 376
377 if (peer) { 377 if (peer) {
378 la->l2_psm = l2cap_pi(sk)->psm; 378 la->l2_psm = chan->psm;
379 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst); 379 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst);
380 la->l2_cid = cpu_to_le16(l2cap_pi(sk)->dcid); 380 la->l2_cid = cpu_to_le16(chan->dcid);
381 } else { 381 } else {
382 la->l2_psm = chan->sport; 382 la->l2_psm = chan->sport;
383 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src); 383 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src);
384 la->l2_cid = cpu_to_le16(l2cap_pi(sk)->scid); 384 la->l2_cid = cpu_to_le16(chan->scid);
385 } 385 }
386 386
387 return 0; 387 return 0;
@@ -737,7 +737,7 @@ static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct ms
737 737
738 /* Connectionless channel */ 738 /* Connectionless channel */
739 if (sk->sk_type == SOCK_DGRAM) { 739 if (sk->sk_type == SOCK_DGRAM) {
740 skb = l2cap_create_connless_pdu(sk, msg, len); 740 skb = l2cap_create_connless_pdu(chan, msg, len);
741 if (IS_ERR(skb)) { 741 if (IS_ERR(skb)) {
742 err = PTR_ERR(skb); 742 err = PTR_ERR(skb);
743 } else { 743 } else {
@@ -756,7 +756,7 @@ static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct ms
756 } 756 }
757 757
758 /* Create a basic PDU */ 758 /* Create a basic PDU */
759 skb = l2cap_create_basic_pdu(sk, msg, len); 759 skb = l2cap_create_basic_pdu(chan, msg, len);
760 if (IS_ERR(skb)) { 760 if (IS_ERR(skb)) {
761 err = PTR_ERR(skb); 761 err = PTR_ERR(skb);
762 goto done; 762 goto done;
@@ -911,8 +911,8 @@ void __l2cap_sock_close(struct sock *sk, int reason)
911 else 911 else
912 result = L2CAP_CR_BAD_PSM; 912 result = L2CAP_CR_BAD_PSM;
913 913
914 rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid); 914 rsp.scid = cpu_to_le16(chan->dcid);
915 rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid); 915 rsp.dcid = cpu_to_le16(chan->scid);
916 rsp.result = cpu_to_le16(result); 916 rsp.result = cpu_to_le16(result);
917 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO); 917 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
918 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, 918 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,