Lines Matching refs:chunk

210 	struct sctp_chunk *chunk, *tmp;  in __sctp_outq_teardown()  local
216 chunk = list_entry(lchunk, struct sctp_chunk, in __sctp_outq_teardown()
219 sctp_chunk_fail(chunk, q->error); in __sctp_outq_teardown()
220 sctp_chunk_free(chunk); in __sctp_outq_teardown()
227 chunk = list_entry(lchunk, struct sctp_chunk, in __sctp_outq_teardown()
229 sctp_chunk_fail(chunk, q->error); in __sctp_outq_teardown()
230 sctp_chunk_free(chunk); in __sctp_outq_teardown()
236 chunk = list_entry(lchunk, struct sctp_chunk, in __sctp_outq_teardown()
238 sctp_chunk_fail(chunk, q->error); in __sctp_outq_teardown()
239 sctp_chunk_free(chunk); in __sctp_outq_teardown()
245 chunk = list_entry(lchunk, struct sctp_chunk, in __sctp_outq_teardown()
247 sctp_chunk_fail(chunk, q->error); in __sctp_outq_teardown()
248 sctp_chunk_free(chunk); in __sctp_outq_teardown()
252 while ((chunk = sctp_outq_dequeue_data(q)) != NULL) { in __sctp_outq_teardown()
253 sctp_sched_dequeue_done(q, chunk); in __sctp_outq_teardown()
256 sctp_chunk_fail(chunk, q->error); in __sctp_outq_teardown()
257 sctp_chunk_free(chunk); in __sctp_outq_teardown()
261 list_for_each_entry_safe(chunk, tmp, &q->control_chunk_list, list) { in __sctp_outq_teardown()
262 list_del_init(&chunk->list); in __sctp_outq_teardown()
263 sctp_chunk_free(chunk); in __sctp_outq_teardown()
281 void sctp_outq_tail(struct sctp_outq *q, struct sctp_chunk *chunk, gfp_t gfp) in sctp_outq_tail() argument
285 pr_debug("%s: outq:%p, chunk:%p[%s]\n", __func__, q, chunk, in sctp_outq_tail()
286 chunk && chunk->chunk_hdr ? in sctp_outq_tail()
287 sctp_cname(SCTP_ST_CHUNK(chunk->chunk_hdr->type)) : in sctp_outq_tail()
293 if (sctp_chunk_is_data(chunk)) { in sctp_outq_tail()
295 __func__, q, chunk, chunk && chunk->chunk_hdr ? in sctp_outq_tail()
296 sctp_cname(SCTP_ST_CHUNK(chunk->chunk_hdr->type)) : in sctp_outq_tail()
299 sctp_outq_tail_data(q, chunk); in sctp_outq_tail()
300 if (chunk->asoc->peer.prsctp_capable && in sctp_outq_tail()
301 SCTP_PR_PRIO_ENABLED(chunk->sinfo.sinfo_flags)) in sctp_outq_tail()
302 chunk->asoc->sent_cnt_removable++; in sctp_outq_tail()
303 if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) in sctp_outq_tail()
308 list_add_tail(&chunk->list, &q->control_chunk_list); in sctp_outq_tail()
452 struct sctp_chunk *chunk; in sctp_retransmit_mark() local
456 chunk = list_entry(lchunk, struct sctp_chunk, in sctp_retransmit_mark()
460 if (sctp_chunk_abandoned(chunk)) { in sctp_retransmit_mark()
469 if (!chunk->tsn_gap_acked) { in sctp_retransmit_mark()
470 if (chunk->transport) in sctp_retransmit_mark()
471 chunk->transport->flight_size -= in sctp_retransmit_mark()
472 sctp_data_size(chunk); in sctp_retransmit_mark()
473 q->outstanding_bytes -= sctp_data_size(chunk); in sctp_retransmit_mark()
474 q->asoc->peer.rwnd += sctp_data_size(chunk); in sctp_retransmit_mark()
484 (chunk->fast_retransmit == SCTP_NEED_FRTX)) || in sctp_retransmit_mark()
485 (reason != SCTP_RTXR_FAST_RTX && !chunk->tsn_gap_acked)) { in sctp_retransmit_mark()
494 q->asoc->peer.rwnd += sctp_data_size(chunk); in sctp_retransmit_mark()
495 q->outstanding_bytes -= sctp_data_size(chunk); in sctp_retransmit_mark()
496 if (chunk->transport) in sctp_retransmit_mark()
497 transport->flight_size -= sctp_data_size(chunk); in sctp_retransmit_mark()
504 chunk->tsn_missing_report = 0; in sctp_retransmit_mark()
512 if (chunk->rtt_in_progress) { in sctp_retransmit_mark()
513 chunk->rtt_in_progress = 0; in sctp_retransmit_mark()
596 struct sctp_chunk *chunk, *chunk1; in __sctp_outq_flush_rtx() local
630 list_for_each_entry_safe(chunk, chunk1, lqueue, transmitted_list) { in __sctp_outq_flush_rtx()
632 if (sctp_chunk_abandoned(chunk)) { in __sctp_outq_flush_rtx()
633 list_del_init(&chunk->transmitted_list); in __sctp_outq_flush_rtx()
635 &chunk->transmitted_list); in __sctp_outq_flush_rtx()
644 if (chunk->tsn_gap_acked) { in __sctp_outq_flush_rtx()
645 list_move_tail(&chunk->transmitted_list, in __sctp_outq_flush_rtx()
653 if (fast_rtx && !chunk->fast_retransmit) in __sctp_outq_flush_rtx()
658 status = sctp_packet_append_chunk(pkt, chunk); in __sctp_outq_flush_rtx()
710 list_move_tail(&chunk->transmitted_list, in __sctp_outq_flush_rtx()
716 if (chunk->fast_retransmit == SCTP_NEED_FRTX) in __sctp_outq_flush_rtx()
717 chunk->fast_retransmit = SCTP_DONT_FRTX; in __sctp_outq_flush_rtx()
762 struct sctp_chunk *chunk, gfp_t gfp) in sctp_packet_singleton() argument
772 if (sctp_packet_append_chunk(&singleton, chunk) != SCTP_XMIT_OK) { in sctp_packet_singleton()
773 list_del_init(&chunk->list); in sctp_packet_singleton()
774 sctp_chunk_free(chunk); in sctp_packet_singleton()
795 struct sctp_chunk *chunk) in sctp_outq_select_transport() argument
797 struct sctp_transport *new_transport = chunk->transport; in sctp_outq_select_transport()
800 if (!sctp_chunk_is_data(chunk)) { in sctp_outq_select_transport()
810 if (ctx->transport && sctp_cmp_addr_exact(&chunk->dest, in sctp_outq_select_transport()
815 &chunk->dest); in sctp_outq_select_transport()
843 type = chunk->chunk_hdr->type; in sctp_outq_select_transport()
875 struct sctp_chunk *chunk, *tmp; in sctp_outq_flush_ctrl() local
879 list_for_each_entry_safe(chunk, tmp, &ctx->q->control_chunk_list, list) { in sctp_outq_flush_ctrl()
889 chunk->chunk_hdr->type != SCTP_CID_ASCONF) in sctp_outq_flush_ctrl()
892 list_del_init(&chunk->list); in sctp_outq_flush_ctrl()
897 sctp_outq_select_transport(ctx, chunk); in sctp_outq_flush_ctrl()
899 switch (chunk->chunk_hdr->type) { in sctp_outq_flush_ctrl()
908 error = sctp_packet_singleton(ctx->transport, chunk, in sctp_outq_flush_ctrl()
917 if (sctp_test_T_bit(chunk)) in sctp_outq_flush_ctrl()
937 if (chunk->pmtu_probe) { in sctp_outq_flush_ctrl()
938 sctp_packet_singleton(ctx->transport, chunk, ctx->gfp); in sctp_outq_flush_ctrl()
949 status = sctp_packet_transmit_chunk(ctx->packet, chunk, in sctp_outq_flush_ctrl()
953 list_add(&chunk->list, &ctx->q->control_chunk_list); in sctp_outq_flush_ctrl()
962 if (chunk->chunk_hdr->type == SCTP_CID_FWD_TSN || in sctp_outq_flush_ctrl()
963 chunk->chunk_hdr->type == SCTP_CID_I_FWD_TSN) { in sctp_outq_flush_ctrl()
968 if (chunk == ctx->asoc->strreset_chunk) in sctp_outq_flush_ctrl()
1030 struct sctp_chunk *chunk; in sctp_outq_flush_data() local
1074 while ((chunk = sctp_outq_dequeue_data(ctx->q)) != NULL) { in sctp_outq_flush_data()
1075 __u32 sid = ntohs(chunk->subh.data_hdr->stream); in sctp_outq_flush_data()
1079 if (sctp_chunk_abandoned(chunk)) { in sctp_outq_flush_data()
1080 sctp_sched_dequeue_done(ctx->q, chunk); in sctp_outq_flush_data()
1081 sctp_chunk_fail(chunk, 0); in sctp_outq_flush_data()
1082 sctp_chunk_free(chunk); in sctp_outq_flush_data()
1087 sctp_outq_head_data(ctx->q, chunk); in sctp_outq_flush_data()
1091 sctp_outq_select_transport(ctx, chunk); in sctp_outq_flush_data()
1094 __func__, ctx->q, chunk, chunk && chunk->chunk_hdr ? in sctp_outq_flush_data()
1095 sctp_cname(SCTP_ST_CHUNK(chunk->chunk_hdr->type)) : in sctp_outq_flush_data()
1096 "illegal chunk", ntohl(chunk->subh.data_hdr->tsn), in sctp_outq_flush_data()
1097 chunk->skb ? chunk->skb->head : NULL, chunk->skb ? in sctp_outq_flush_data()
1098 refcount_read(&chunk->skb->users) : -1); in sctp_outq_flush_data()
1101 status = sctp_packet_transmit_chunk(ctx->packet, chunk, 0, in sctp_outq_flush_data()
1108 __func__, ntohl(chunk->subh.data_hdr->tsn), in sctp_outq_flush_data()
1111 sctp_outq_head_data(ctx->q, chunk); in sctp_outq_flush_data()
1120 chunk->chunk_hdr->flags |= SCTP_DATA_SACK_IMM; in sctp_outq_flush_data()
1121 if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) in sctp_outq_flush_data()
1129 sctp_sched_dequeue_done(ctx->q, chunk); in sctp_outq_flush_data()
1131 list_add_tail(&chunk->transmitted_list, in sctp_outq_flush_data()
1238 int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk) in sctp_outq_sack() argument
1241 struct sctp_sackhdr *sack = chunk->subh.sack_hdr; in sctp_outq_sack()
1326 transport, &chunk->source, sack, in sctp_outq_sack()
1366 SCTP_PR_PRIO_ENABLED(chunk->sinfo.sinfo_flags)) in sctp_outq_sack()
1702 struct sctp_chunk *chunk; in sctp_mark_missing() local
1708 list_for_each_entry(chunk, transmitted_queue, transmitted_list) { in sctp_mark_missing()
1710 tsn = ntohl(chunk->subh.data_hdr->tsn); in sctp_mark_missing()
1719 if (chunk->fast_retransmit == SCTP_CAN_FRTX && in sctp_mark_missing()
1720 !chunk->tsn_gap_acked && in sctp_mark_missing()
1727 chunk->transport, in sctp_mark_missing()
1729 chunk->tsn_missing_report++; in sctp_mark_missing()
1732 __func__, tsn, chunk->tsn_missing_report); in sctp_mark_missing()
1742 if (chunk->tsn_missing_report >= 3) { in sctp_mark_missing()
1743 chunk->fast_retransmit = SCTP_NEED_FRTX; in sctp_mark_missing()
1817 struct sctp_chunk *chunk; in sctp_generate_fwdtsn() local
1854 chunk = list_entry(lchunk, struct sctp_chunk, in sctp_generate_fwdtsn()
1856 tsn = ntohl(chunk->subh.data_hdr->tsn); in sctp_generate_fwdtsn()
1863 sctp_chunk_free(chunk); in sctp_generate_fwdtsn()
1867 if (chunk->chunk_hdr->flags & in sctp_generate_fwdtsn()
1872 chunk->subh.data_hdr->stream); in sctp_generate_fwdtsn()
1874 chunk->subh.data_hdr->stream; in sctp_generate_fwdtsn()
1876 chunk->subh.data_hdr->ssn; in sctp_generate_fwdtsn()