sctp: only update outstanding_bytes for transmitted queue when doing prsctp_prune
[ Upstream commitd30fc5126e
] Now outstanding_bytes is only increased when appending chunks into one packet and sending it at 1st time, while decreased when it is about to move into retransmit queue. It means outstanding_bytes value is already decreased for all chunks in retransmit queue. However sctp_prsctp_prune_sent is a common function to check the chunks in both transmitted and retransmit queue, it decrease outstanding_bytes when moving a chunk into abandoned queue from either of them. It could cause outstanding_bytes underflow, as it also decreases it's value for the chunks in retransmit queue. This patch fixes it by only updating outstanding_bytes for transmitted queue when pruning queues for prsctp prio policy, the same fix is also needed in sctp_check_transmitted. Fixes:8dbdf1f5b0
("sctp: implement prsctp PRIO policy") Signed-off-by: Xin Long <lucien.xin@gmail.com> Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <alexander.levin@verizon.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
559be170a4
Коммит
7a7bcee6d7
|
@ -368,7 +368,8 @@ static int sctp_prsctp_prune_sent(struct sctp_association *asoc,
|
|||
asoc->abandoned_sent[SCTP_PR_INDEX(PRIO)]++;
|
||||
streamout->abandoned_sent[SCTP_PR_INDEX(PRIO)]++;
|
||||
|
||||
if (!chk->tsn_gap_acked) {
|
||||
if (queue != &asoc->outqueue.retransmit &&
|
||||
!chk->tsn_gap_acked) {
|
||||
if (chk->transport)
|
||||
chk->transport->flight_size -=
|
||||
sctp_data_size(chk);
|
||||
|
@ -1429,7 +1430,8 @@ static void sctp_check_transmitted(struct sctp_outq *q,
|
|||
/* If this chunk has not been acked, stop
|
||||
* considering it as 'outstanding'.
|
||||
*/
|
||||
if (!tchunk->tsn_gap_acked) {
|
||||
if (transmitted_queue != &q->retransmit &&
|
||||
!tchunk->tsn_gap_acked) {
|
||||
if (tchunk->transport)
|
||||
tchunk->transport->flight_size -=
|
||||
sctp_data_size(tchunk);
|
||||
|
|
Загрузка…
Ссылка в новой задаче