Lines Matching refs:dfrag
783 static void dfrag_clear(struct sock *sk, struct mptcp_data_frag *dfrag) in dfrag_clear() argument
785 int len = dfrag->data_len + dfrag->overhead; in dfrag_clear()
787 list_del(&dfrag->list); in dfrag_clear()
789 put_page(dfrag->page); in dfrag_clear()
809 struct mptcp_data_frag *dtmp, *dfrag; in mptcp_clean_una() local
820 list_for_each_entry_safe(dfrag, dtmp, &msk->rtx_queue, list) { in mptcp_clean_una()
821 if (after64(dfrag->data_seq + dfrag->data_len, snd_una)) in mptcp_clean_una()
824 dfrag_clear(sk, dfrag); in mptcp_clean_una()
828 dfrag = mptcp_rtx_head(sk); in mptcp_clean_una()
829 if (dfrag && after64(snd_una, dfrag->data_seq)) { in mptcp_clean_una()
830 u64 delta = snd_una - dfrag->data_seq; in mptcp_clean_una()
832 if (WARN_ON_ONCE(delta > dfrag->data_len)) in mptcp_clean_una()
835 dfrag->data_seq += delta; in mptcp_clean_una()
836 dfrag->offset += delta; in mptcp_clean_una()
837 dfrag->data_len -= delta; in mptcp_clean_una()
879 struct mptcp_data_frag *dfrag; in mptcp_carve_data_frag() local
881 dfrag = (struct mptcp_data_frag *)(page_to_virt(pfrag->page) + offset); in mptcp_carve_data_frag()
882 dfrag->data_len = 0; in mptcp_carve_data_frag()
883 dfrag->data_seq = msk->write_seq; in mptcp_carve_data_frag()
884 dfrag->overhead = offset - orig_offset + sizeof(struct mptcp_data_frag); in mptcp_carve_data_frag()
885 dfrag->offset = offset + sizeof(struct mptcp_data_frag); in mptcp_carve_data_frag()
886 dfrag->page = pfrag->page; in mptcp_carve_data_frag()
888 return dfrag; in mptcp_carve_data_frag()
892 struct msghdr *msg, struct mptcp_data_frag *dfrag, in mptcp_sendmsg_frag() argument
900 bool retransmission = !!dfrag; in mptcp_sendmsg_frag()
917 write_seq = &dfrag->data_seq; in mptcp_sendmsg_frag()
918 page = dfrag->page; in mptcp_sendmsg_frag()
948 dfrag = mptcp_rtx_tail(sk); in mptcp_sendmsg_frag()
950 dfrag_collapsed = mptcp_frag_can_collapse_to(msk, pfrag, dfrag); in mptcp_sendmsg_frag()
952 dfrag = mptcp_carve_data_frag(msk, pfrag, offset); in mptcp_sendmsg_frag()
953 offset = dfrag->offset; in mptcp_sendmsg_frag()
954 frag_truesize = dfrag->overhead; in mptcp_sendmsg_frag()
968 if (!sk_wmem_schedule(sk, psize + dfrag->overhead)) { in mptcp_sendmsg_frag()
973 offset = dfrag->offset; in mptcp_sendmsg_frag()
974 psize = min_t(size_t, dfrag->data_len, avail_size); in mptcp_sendmsg_frag()
996 dfrag->data_len += ret; in mptcp_sendmsg_frag()
998 get_page(dfrag->page); in mptcp_sendmsg_frag()
999 list_add_tail(&dfrag->list, &msk->rtx_queue); in mptcp_sendmsg_frag()
1753 struct mptcp_data_frag *dfrag; in mptcp_worker() local
1781 dfrag = mptcp_rtx_head(sk); in mptcp_worker()
1782 if (!dfrag) in mptcp_worker()
1794 orig_len = dfrag->data_len; in mptcp_worker()
1795 orig_offset = dfrag->offset; in mptcp_worker()
1796 orig_write_seq = dfrag->data_seq; in mptcp_worker()
1797 while (dfrag->data_len > 0) { in mptcp_worker()
1798 int ret = mptcp_sendmsg_frag(sk, ssk, &msg, dfrag, &timeo, in mptcp_worker()
1805 dfrag->data_len -= ret; in mptcp_worker()
1806 dfrag->offset += ret; in mptcp_worker()
1815 dfrag->data_seq = orig_write_seq; in mptcp_worker()
1816 dfrag->offset = orig_offset; in mptcp_worker()
1817 dfrag->data_len = orig_len; in mptcp_worker()
1884 struct mptcp_data_frag *dtmp, *dfrag; in __mptcp_clear_xmit() local
1888 list_for_each_entry_safe(dfrag, dtmp, &msk->rtx_queue, list) in __mptcp_clear_xmit()
1889 dfrag_clear(sk, dfrag); in __mptcp_clear_xmit()