Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[LLC]: Fix TX window scaling

Signed-off-by: Jochen Friedrich <jochen@scram.de>
Acked-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Jochen Friedrich and committed by
David S. Miller
59c6196e cb422c46

+11 -9
+11 -9
net/llc/llc_c_ac.c
··· 866 866 llc->ack_must_be_send = 1; 867 867 llc->ack_pf = pf_bit & 1; 868 868 } 869 - if (((llc->vR - llc->first_pdu_Ns + 129) % 128) >= llc->npta) { 869 + if (((llc->vR - llc->first_pdu_Ns + 1 + LLC_2_SEQ_NBR_MODULO) 870 + % LLC_2_SEQ_NBR_MODULO) >= llc->npta) { 870 871 llc_conn_ac_send_rr_rsp_f_set_ackpf(sk, skb); 871 872 llc->ack_must_be_send = 0; 872 873 llc->ack_pf = 0; ··· 995 994 llc->dec_step = 0; 996 995 llc->dec_cntr = llc->inc_cntr = 2; 997 996 ++llc->npta; 998 - if (llc->npta > 127) 999 - llc->npta = 127 ; 997 + if (llc->npta > ~LLC_2_SEQ_NBR_MODULO) 998 + llc->npta = ~LLC_2_SEQ_NBR_MODULO ; 1000 999 } else 1001 1000 --llc->inc_cntr; 1002 1001 return 0; ··· 1066 1065 struct llc_sock *llc = llc_sk(sk); 1067 1066 u8 unacked_pdu = skb_queue_len(&llc->pdu_unack_q); 1068 1067 1069 - llc->k -= unacked_pdu; 1070 - if (llc->k < 2) 1071 - llc->k = 2; 1068 + if (llc->k - unacked_pdu < 1) 1069 + llc->k = 1; 1070 + else 1071 + llc->k -= unacked_pdu; 1072 1072 return 0; 1073 1073 } 1074 1074 ··· 1086 1084 struct llc_sock *llc = llc_sk(sk); 1087 1085 1088 1086 llc->k += 1; 1089 - if (llc->k > 128) 1090 - llc->k = 128 ; 1087 + if (llc->k > ~LLC_2_SEQ_NBR_MODULO) 1088 + llc->k = ~LLC_2_SEQ_NBR_MODULO ; 1091 1089 return 0; 1092 1090 } 1093 1091 ··· 1311 1309 1312 1310 static int llc_conn_ac_inc_vs_by_1(struct sock *sk, struct sk_buff *skb) 1313 1311 { 1314 - llc_sk(sk)->vS = (llc_sk(sk)->vS + 1) % 128; 1312 + llc_sk(sk)->vS = (llc_sk(sk)->vS + 1) % LLC_2_SEQ_NBR_MODULO; 1315 1313 return 0; 1316 1314 } 1317 1315