Lines Matching refs:frag
615 struct sk_buff *frag, *frag2; in ip_do_fragment() local
625 skb_walk_frags(skb, frag) { in ip_do_fragment()
627 if (frag->len > mtu || in ip_do_fragment()
628 ((frag->len & 7) && frag->next) || in ip_do_fragment()
629 skb_headroom(frag) < hlen + ll_rs) in ip_do_fragment()
633 if (skb_shared(frag)) in ip_do_fragment()
636 BUG_ON(frag->sk); in ip_do_fragment()
638 frag->sk = skb->sk; in ip_do_fragment()
639 frag->destructor = sock_wfree; in ip_do_fragment()
641 skb->truesize -= frag->truesize; in ip_do_fragment()
648 frag = skb_shinfo(skb)->frag_list; in ip_do_fragment()
659 if (frag) { in ip_do_fragment()
660 frag->ip_summed = CHECKSUM_NONE; in ip_do_fragment()
661 skb_reset_transport_header(frag); in ip_do_fragment()
662 __skb_push(frag, hlen); in ip_do_fragment()
663 skb_reset_network_header(frag); in ip_do_fragment()
664 memcpy(skb_network_header(frag), iph, hlen); in ip_do_fragment()
665 iph = ip_hdr(frag); in ip_do_fragment()
666 iph->tot_len = htons(frag->len); in ip_do_fragment()
667 ip_copy_metadata(frag, skb); in ip_do_fragment()
669 ip_options_fragment(frag); in ip_do_fragment()
672 if (frag->next) in ip_do_fragment()
682 if (err || !frag) in ip_do_fragment()
685 skb = frag; in ip_do_fragment()
686 frag = skb->next; in ip_do_fragment()
695 while (frag) { in ip_do_fragment()
696 skb = frag->next; in ip_do_fragment()
697 kfree_skb(frag); in ip_do_fragment()
698 frag = skb; in ip_do_fragment()
705 if (frag2 == frag) in ip_do_fragment()