|
@@ -768,13 +768,14 @@ slow_path:
|
|
|
* Fragment the datagram.
|
|
* Fragment the datagram.
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
- *prevhdr = NEXTHDR_FRAGMENT;
|
|
|
|
|
troom = rt->dst.dev->needed_tailroom;
|
|
troom = rt->dst.dev->needed_tailroom;
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
* Keep copying data until we run out.
|
|
* Keep copying data until we run out.
|
|
|
*/
|
|
*/
|
|
|
while (left > 0) {
|
|
while (left > 0) {
|
|
|
|
|
+ u8 *fragnexthdr_offset;
|
|
|
|
|
+
|
|
|
len = left;
|
|
len = left;
|
|
|
/* IF: it doesn't fit, use 'mtu' - the data space left */
|
|
/* IF: it doesn't fit, use 'mtu' - the data space left */
|
|
|
if (len > mtu)
|
|
if (len > mtu)
|
|
@@ -819,6 +820,10 @@ slow_path:
|
|
|
*/
|
|
*/
|
|
|
skb_copy_from_linear_data(skb, skb_network_header(frag), hlen);
|
|
skb_copy_from_linear_data(skb, skb_network_header(frag), hlen);
|
|
|
|
|
|
|
|
|
|
+ fragnexthdr_offset = skb_network_header(frag);
|
|
|
|
|
+ fragnexthdr_offset += prevhdr - skb_network_header(skb);
|
|
|
|
|
+ *fragnexthdr_offset = NEXTHDR_FRAGMENT;
|
|
|
|
|
+
|
|
|
/*
|
|
/*
|
|
|
* Build fragment header.
|
|
* Build fragment header.
|
|
|
*/
|
|
*/
|