Lines Matching refs:dfrag
996 static void dfrag_clear(struct sock *sk, struct mptcp_data_frag *dfrag)
998 int len = dfrag->data_len + dfrag->overhead;
1000 list_del(&dfrag->list);
1002 put_page(dfrag->page);
1008 struct mptcp_data_frag *dtmp, *dfrag;
1012 list_for_each_entry_safe(dfrag, dtmp, &msk->rtx_queue, list) {
1013 if (after64(dfrag->data_seq + dfrag->data_len, snd_una))
1016 if (unlikely(dfrag == msk->first_pending)) {
1024 dfrag_clear(sk, dfrag);
1027 dfrag = mptcp_rtx_head(sk);
1028 if (dfrag && after64(snd_una, dfrag->data_seq)) {
1029 u64 delta = snd_una - dfrag->data_seq;
1032 if (unlikely(delta > dfrag->already_sent)) {
1035 if (WARN_ON_ONCE(delta > dfrag->data_len))
1037 dfrag->already_sent += delta - dfrag->already_sent;
1040 dfrag->data_seq += delta;
1041 dfrag->offset += delta;
1042 dfrag->data_len -= delta;
1043 dfrag->already_sent -= delta;
1113 struct mptcp_data_frag *dfrag;
1115 dfrag = (struct mptcp_data_frag *)(page_to_virt(pfrag->page) + offset);
1116 dfrag->data_len = 0;
1117 dfrag->data_seq = msk->write_seq;
1118 dfrag->overhead = offset - orig_offset + sizeof(struct mptcp_data_frag);
1119 dfrag->offset = offset + sizeof(struct mptcp_data_frag);
1120 dfrag->already_sent = 0;
1121 dfrag->page = pfrag->page;
1123 return dfrag;
1239 struct mptcp_data_frag *dfrag,
1242 u64 data_seq = dfrag->data_seq + info->sent;
1243 int offset = dfrag->offset + info->sent;
1253 pr_debug("msk=%p ssk=%p sending dfrag at seq=%llu len=%u already sent=%u",
1254 msk, ssk, dfrag->data_seq, dfrag->data_len, info->sent);
1257 info->limit > dfrag->data_len))
1285 can_coalesce = skb_can_coalesce(skb, i, dfrag->page, offset);
1327 get_page(dfrag->page);
1328 skb_fill_page_desc(skb, i, dfrag->page, offset, copy);
1498 struct mptcp_data_frag *dfrag,
1501 u64 snd_nxt_new = dfrag->data_seq;
1503 dfrag->already_sent += sent;
1507 snd_nxt_new += dfrag->already_sent;
1514 * the dfrag->data_seq that was sent and the data
1516 * and skip update in case it was old dfrag.
1537 struct mptcp_data_frag *dfrag;
1540 while ((dfrag = mptcp_send_head(sk))) {
1541 info->sent = dfrag->already_sent;
1542 info->limit = dfrag->data_len;
1543 len = dfrag->data_len - dfrag->already_sent;
1547 ret = mptcp_sendmsg_frag(sk, ssk, dfrag, info);
1557 mptcp_update_post_push(msk, dfrag, ret);
1815 struct mptcp_data_frag *dfrag;
1822 dfrag = mptcp_pending_tail(sk);
1823 dfrag_collapsed = mptcp_frag_can_collapse_to(msk, pfrag, dfrag);
1831 dfrag = mptcp_carve_data_frag(msk, pfrag, pfrag->offset);
1832 frag_truesize = dfrag->overhead;
1839 offset = dfrag->offset + dfrag->data_len;
1847 if (copy_page_from_iter(dfrag->page, offset, psize,
1856 dfrag->data_len += psize;
1866 get_page(dfrag->page);
1867 list_add_tail(&dfrag->list, &msk->rtx_queue);
1869 WRITE_ONCE(msk->first_pending, dfrag);
1871 pr_debug("msk=%p dfrag at seq=%llu len=%u sent=%u new=%d", msk,
1872 dfrag->data_seq, dfrag->data_len, dfrag->already_sent,
2587 struct mptcp_data_frag *dfrag;
2596 dfrag = mptcp_rtx_head(sk);
2597 if (!dfrag) {
2629 info.limit = READ_ONCE(msk->csum_enabled) ? dfrag->data_len :
2630 dfrag->already_sent;
2632 ret = mptcp_sendmsg_frag(sk, ssk, dfrag, &info);
2652 dfrag->already_sent = max(dfrag->already_sent, len);
2831 struct mptcp_data_frag *dtmp, *dfrag;
2834 list_for_each_entry_safe(dfrag, dtmp, &msk->rtx_queue, list)
2835 dfrag_clear(sk, dfrag);