sctp: move chunk from retransmit queue to abandoned list
authorWei Yongjun <yjwei@cn.fujitsu.com>
Tue, 19 Apr 2011 21:32:28 +0000 (21:32 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 20 Apr 2011 08:51:06 +0000 (01:51 -0700)
If there is still data waiting to retransmit and remain in
retransmit queue, while doing the next retransmit, if the
chunk is abandoned, we should move it to abandoned list.

Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/outqueue.c

index 3e9d8d2bbe71effc0fc02cd3fa7e99cd25efd0c0..1c88c8911dc50095315bc02463f2b3e5e1535509 100644 (file)
@@ -577,6 +577,13 @@ static int sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt,
         * try to send as much as possible.
         */
        list_for_each_entry_safe(chunk, chunk1, lqueue, transmitted_list) {
+               /* If the chunk is abandoned, move it to abandoned list. */
+               if (sctp_chunk_abandoned(chunk)) {
+                       list_del_init(&chunk->transmitted_list);
+                       sctp_insert_list(&q->abandoned,
+                                        &chunk->transmitted_list);
+                       continue;
+               }
 
                /* Make sure that Gap Acked TSNs are not retransmitted.  A
                 * simple approach is just to move such TSNs out of the