[IrDA]: f-timer reloading when sending rejected frames.
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 <gl@dsa-ac.de> Signed-off-by: Samuel Ortiz <samuel@sortiz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c0cfe7faa1
commit
b7e773b869
@ -1418,14 +1418,14 @@ static int irlap_state_nrm_p(struct irlap_cb *self, IRLAP_EVENT event,
|
||||
*/
|
||||
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 @@ static int irlap_state_nrm_p(struct irlap_cb *self, IRLAP_EVENT event,
|
||||
|
||||
/* 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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user