diff options
Diffstat (limited to 'net/bluetooth/l2cap.c')
-rw-r--r-- | net/bluetooth/l2cap.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c index d56f60b392ac..bbf78e6a7bc3 100644 --- a/net/bluetooth/l2cap.c +++ b/net/bluetooth/l2cap.c | |||
@@ -559,7 +559,7 @@ static int l2cap_sock_create(struct socket *sock, int protocol) | |||
559 | 559 | ||
560 | sock->ops = &l2cap_sock_ops; | 560 | sock->ops = &l2cap_sock_ops; |
561 | 561 | ||
562 | sk = l2cap_sock_alloc(sock, protocol, GFP_KERNEL); | 562 | sk = l2cap_sock_alloc(sock, protocol, GFP_ATOMIC); |
563 | if (!sk) | 563 | if (!sk) |
564 | return -ENOMEM; | 564 | return -ENOMEM; |
565 | 565 | ||
@@ -1353,12 +1353,12 @@ static inline int l2cap_conf_output(struct sock *sk, void **ptr) | |||
1353 | 1353 | ||
1354 | /* Configure output options and let the other side know | 1354 | /* Configure output options and let the other side know |
1355 | * which ones we don't like. */ | 1355 | * which ones we don't like. */ |
1356 | if (pi->conf_mtu < pi->omtu) { | 1356 | if (pi->conf_mtu < pi->omtu) |
1357 | l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, pi->omtu); | ||
1358 | result = L2CAP_CONF_UNACCEPT; | 1357 | result = L2CAP_CONF_UNACCEPT; |
1359 | } else { | 1358 | else |
1360 | pi->omtu = pi->conf_mtu; | 1359 | pi->omtu = pi->conf_mtu; |
1361 | } | 1360 | |
1361 | l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, pi->omtu); | ||
1362 | 1362 | ||
1363 | BT_DBG("sk %p result %d", sk, result); | 1363 | BT_DBG("sk %p result %d", sk, result); |
1364 | return result; | 1364 | return result; |
@@ -1533,6 +1533,9 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr | |||
1533 | if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid))) | 1533 | if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid))) |
1534 | return -ENOENT; | 1534 | return -ENOENT; |
1535 | 1535 | ||
1536 | if (sk->sk_state == BT_DISCONN) | ||
1537 | goto unlock; | ||
1538 | |||
1536 | l2cap_parse_conf_req(sk, req->data, cmd->len - sizeof(*req)); | 1539 | l2cap_parse_conf_req(sk, req->data, cmd->len - sizeof(*req)); |
1537 | 1540 | ||
1538 | if (flags & 0x0001) { | 1541 | if (flags & 0x0001) { |
@@ -2216,7 +2219,8 @@ static int __init l2cap_init(void) | |||
2216 | goto error; | 2219 | goto error; |
2217 | } | 2220 | } |
2218 | 2221 | ||
2219 | class_create_file(bt_class, &class_attr_l2cap); | 2222 | if (class_create_file(bt_class, &class_attr_l2cap) < 0) |
2223 | BT_ERR("Failed to create L2CAP info file"); | ||
2220 | 2224 | ||
2221 | BT_INFO("L2CAP ver %s", VERSION); | 2225 | BT_INFO("L2CAP ver %s", VERSION); |
2222 | BT_INFO("L2CAP socket layer initialized"); | 2226 | BT_INFO("L2CAP socket layer initialized"); |