+ * other end detect ID wrap. */
+ if (skb->sk) {
+ unsigned int slack;
+ struct inet_opt *inet = inet_sk(skb->sk);
+
+ slack = (left % mtu);
+ if (slack)
+ /* Shift by 8 bytes per id wrap. */
+ len = mtu - (slack % ((inet->id >> 16) << 3));
I'm pretty sure inet->id is wrong here. You would like the counter
in the inet peer entry. inet_sk(sk)->id is just used for the pseudo
counter in TCP that only works around VJ compression bugs. It's never used
for real fragmentation.
-Andi