|
@@ -840,7 +840,10 @@ static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
|
|
|
if (!skb)
|
|
|
return;
|
|
|
|
|
|
- if (lmp_no_flush_capable(conn->hcon->hdev))
|
|
|
+ /* Use NO_FLUSH if supported or we have an LE link (which does
|
|
|
+ * not support auto-flushing packets) */
|
|
|
+ if (lmp_no_flush_capable(conn->hcon->hdev) ||
|
|
|
+ conn->hcon->type == LE_LINK)
|
|
|
flags = ACL_START_NO_FLUSH;
|
|
|
else
|
|
|
flags = ACL_START;
|
|
@@ -874,8 +877,13 @@ static void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (!test_bit(FLAG_FLUSHABLE, &chan->flags) &&
|
|
|
- lmp_no_flush_capable(hcon->hdev))
|
|
|
+ /* Use NO_FLUSH for LE links (where this is the only option) or
|
|
|
+ * if the BR/EDR link supports it and flushing has not been
|
|
|
+ * explicitly requested (through FLAG_FLUSHABLE).
|
|
|
+ */
|
|
|
+ if (hcon->type == LE_LINK ||
|
|
|
+ (!test_bit(FLAG_FLUSHABLE, &chan->flags) &&
|
|
|
+ lmp_no_flush_capable(hcon->hdev)))
|
|
|
flags = ACL_START_NO_FLUSH;
|
|
|
else
|
|
|
flags = ACL_START;
|