diff -Nru a/include/net/bluetooth/rfcomm.h b/include/net/bluetooth/rfcomm.h --- a/include/net/bluetooth/rfcomm.h Wed Jul 30 23:33:57 2003 +++ b/include/net/bluetooth/rfcomm.h Wed Jul 30 23:33:57 2003 @@ -166,9 +166,7 @@ atomic_t refcnt; int initiator; - /* Default DLC parameters */ - uint mtu; - uint credits; + uint mtu; struct list_head dlcs; }; diff -Nru a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c --- a/net/bluetooth/rfcomm/core.c Wed Jul 30 23:33:57 2003 +++ b/net/bluetooth/rfcomm/core.c Wed Jul 30 23:33:57 2003 @@ -202,7 +202,7 @@ d->mtu = RFCOMM_DEFAULT_MTU; d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV; - d->credits = RFCOMM_MAX_CREDITS; + d->credits = 0; d->rx_credits = RFCOMM_DEFAULT_CREDITS; } @@ -310,7 +310,6 @@ rfcomm_dlc_link(s, d); d->mtu = s->mtu; - d->credits = s->credits; if (s->state == BT_CONNECTED) rfcomm_send_pn(s, 1, d); @@ -474,9 +473,8 @@ s->state = state; s->sock = sock; - s->mtu = RFCOMM_DEFAULT_MTU; - s->credits = RFCOMM_MAX_CREDITS; - + s->mtu = RFCOMM_DEFAULT_MTU; + list_add(&s->list, &session_list); /* Do not increment module usage count for listeting sessions. @@ -746,7 +744,7 @@ pn->ack_timer = 0; pn->max_retrans = 0; - if (d->credits) { + if (cr || d->credits) { pn->flow_ctrl = cr ? 0xf0 : 0xe0; pn->credits = RFCOMM_DEFAULT_CREDITS; } else { @@ -1140,18 +1138,16 @@ if (cr) { if (pn->flow_ctrl == 0xf0) { + d->credits = RFCOMM_MAX_CREDITS; d->tx_credits = pn->credits; - } else { + } else set_bit(RFCOMM_TX_THROTTLED, &d->flags); - d->credits = 0; - } } else { if (pn->flow_ctrl == 0xe0) { + d->credits = RFCOMM_MAX_CREDITS; d->tx_credits = pn->credits; - } else { + } else set_bit(RFCOMM_TX_THROTTLED, &d->flags); - d->credits = 0; - } } d->priority = pn->priority;