Jean II was right: you have to re-charge the final timer when resending
rejected frames. Otherwise it triggers at a wrong time and can break the
currently running communication. Reproducible under rt-preempt.
Signed-off-by: G. Liakhovetski <[EMAIL PROTECTED]>
Signed-off-by: Samuel Ortiz <[EMAIL PROTECTED]>
Index: net-2.6-quilt/net/irda/irlap_event.c
===================================================================
--- net-2.6-quilt.orig/net/irda/irlap_event.c 2007-05-29 09:36:09.000000000
+0300
+++ net-2.6-quilt/net/irda/irlap_event.c 2007-05-29 09:38:19.000000000
+0300
@@ -1418,14 +1418,14 @@
*/
self->remote_busy = FALSE;
+ /* Stop final timer */
+ del_timer(&self->final_timer);
+
/*
* Nr as expected?
*/
ret = irlap_validate_nr_received(self, info->nr);
if (ret == NR_EXPECTED) {
- /* Stop final timer */
- del_timer(&self->final_timer);
-
/* Update Nr received */
irlap_update_nr_received(self, info->nr);
@@ -1457,14 +1457,12 @@
/* Resend rejected frames */
irlap_resend_rejected_frames(self, CMD_FRAME);
-
- /* Final timer ??? Jean II */
+ irlap_start_final_timer(self, self->final_timeout * 2);
irlap_next_state(self, LAP_NRM_P);
} else if (ret == NR_INVALID) {
IRDA_DEBUG(1, "%s(), Received RR with "
"invalid nr !\n", __FUNCTION__);
- del_timer(&self->final_timer);
irlap_next_state(self, LAP_RESET_WAIT);
--
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html