mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
sctp: only update outstanding_bytes for transmitted queue when doing prsctp_prune
[ Upstream commit d30fc5126efb0c33b7adf5966d3051db2c3d7721 ] 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: 8dbdf1f5b09c ("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:
parent
559be170a4
commit
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user