Bluetooth: Ack L2CAP I-frames before retransmit missing packet
authorGustavo F. Padovan <gustavo@las.ic.unicamp.br>
Tue, 15 Dec 2009 22:13:27 +0000 (20:13 -0200)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 17 Dec 2009 20:06:23 +0000 (12:06 -0800)
Moving the Ack to before l2cap_retransmit_frame() we can avoid the
case where txWindow is full and the packet can't be retransmited.

Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/l2cap.c

index 7db9a1f8f882e74e4a48ada3e059bb5866f2055d..fb0f81d99f96adf05250963a8ba91871b936d2c1 100644 (file)
@@ -3471,9 +3471,9 @@ static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, str
                pi->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
 
                if (rx_control & L2CAP_CTRL_POLL) {
-                       l2cap_retransmit_frame(sk, tx_seq);
                        pi->expected_ack_seq = tx_seq;
                        l2cap_drop_acked_frames(sk);
+                       l2cap_retransmit_frame(sk, tx_seq);
                        l2cap_ertm_send(sk);
                        if (pi->conn_state & L2CAP_CONN_WAIT_F) {
                                pi->srej_save_reqseq = tx_seq;