From 91f7145b47b8ade385f9b1dcc5123818d054efa3 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 20 Oct 2007 13:35:42 +0200 Subject: [PATCH] --- yaml --- r: 72077 b: refs/heads/master c: 876d9484edf77d228adb42aecd4debd58d7739d6 h: refs/heads/master i: 72075: d32cf61aeaede3a3a2373c341824749d16a940cd v: v3 --- [refs] | 2 +- trunk/net/bluetooth/l2cap.c | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 43775e43b376..53ecd37bb452 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a9de9248064bfc8eb0a183a6a951a4e7b5ca10a4 +refs/heads/master: 876d9484edf77d228adb42aecd4debd58d7739d6 diff --git a/trunk/net/bluetooth/l2cap.c b/trunk/net/bluetooth/l2cap.c index 36ef27b625db..6ce693d2e5b9 100644 --- a/trunk/net/bluetooth/l2cap.c +++ b/trunk/net/bluetooth/l2cap.c @@ -1370,8 +1370,10 @@ static int l2cap_parse_conf_req(struct sock *sk, void *data) if (pi->conf_mtu < pi->omtu) result = L2CAP_CONF_UNACCEPT; - else + else { pi->omtu = pi->conf_mtu; + pi->conf_state |= L2CAP_CONF_OUTPUT_DONE; + } l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->omtu); } @@ -1577,16 +1579,19 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp); - /* Output config done. */ - l2cap_pi(sk)->conf_state |= L2CAP_CONF_OUTPUT_DONE; - /* Reset config buffer. */ l2cap_pi(sk)->conf_len = 0; + if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE)) + goto unlock; + if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) { sk->sk_state = BT_CONNECTED; l2cap_chan_ready(sk); - } else if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) { + goto unlock; + } + + if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) { u8 req[64]; l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req); @@ -1646,7 +1651,6 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr if (flags & 0x01) goto done; - /* Input config done */ l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE; if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) {