|
@@ -6787,6 +6787,16 @@ static int l2cap_le_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
|
|
|
chan->sdu_len = sdu_len;
|
|
|
chan->sdu_last_frag = skb;
|
|
|
|
|
|
+ /* Detect if remote is not able to use the selected MPS */
|
|
|
+ if (skb->len + L2CAP_SDULEN_SIZE < chan->mps) {
|
|
|
+ u16 mps_len = skb->len + L2CAP_SDULEN_SIZE;
|
|
|
+
|
|
|
+ /* Adjust the number of credits */
|
|
|
+ BT_DBG("chan->mps %u -> %u", chan->mps, mps_len);
|
|
|
+ chan->mps = mps_len;
|
|
|
+ l2cap_chan_le_send_credits(chan);
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|