diff -ur ipvs-1.0.6/ipvs/ip_vs_conn.c ipvs-1.0.6-testonly/ipvs/ip_vs_conn.c --- ipvs-1.0.6/ipvs/ip_vs_conn.c 2002-08-10 07:32:35.000000000 +0300 +++ ipvs-1.0.6-testonly/ipvs/ip_vs_conn.c 2002-09-16 15:59:14.000000000 +0300 @@ -628,8 +628,7 @@ goto tx_error; } - if (skb_is_nonlinear(skb) && skb->len <= mtu) - ip_send_check(iph); + ip_send_check(iph); if (unlikely(skb_headroom(skb) < rt->u.dst.dev->hard_header_len)) { if (skb_cow(skb, rt->u.dst.dev->hard_header_len)) { @@ -886,8 +885,7 @@ goto tx_error; } - if (skb_is_nonlinear(skb)) - ip_send_check(old_iph); + ip_send_check(old_iph); skb->h.raw = skb->nh.raw; @@ -975,8 +973,7 @@ goto tx_error; } - if (skb_is_nonlinear(skb) && skb->len <= mtu) - ip_send_check(iph); + ip_send_check(iph); if (unlikely(skb_headroom(skb) < rt->u.dst.dev->hard_header_len)) { if (skb_cow(skb, rt->u.dst.dev->hard_header_len)) { diff -ur ipvs-1.0.6/ipvs/ip_vs_core.c ipvs-1.0.6-testonly/ipvs/ip_vs_core.c --- ipvs-1.0.6/ipvs/ip_vs_core.c 2002-08-10 07:32:35.000000000 +0300 +++ ipvs-1.0.6-testonly/ipvs/ip_vs_core.c 2002-09-16 15:54:03.000000000 +0300 @@ -511,12 +511,12 @@ if (!skb) return NF_STOLEN; *skb_p = skb; + ip_send_check(skb->nh.iph); } if (skb_is_nonlinear(skb)) { if (skb_linearize(skb, GFP_ATOMIC) != 0) return NF_DROP; - ip_send_check(skb->nh.iph); } iph = skb->nh.iph; @@ -700,8 +700,7 @@ ip_vs_proto_name(iph->protocol), NIPQUAD(iph->daddr), ntohs(h.portp[1])); - if (skb_is_nonlinear(skb)) - ip_send_check(iph); + ip_send_check(iph); return NF_ACCEPT; } @@ -863,10 +862,10 @@ if (skb_is_nonlinear(skb)) { if (skb_linearize(skb, GFP_ATOMIC) != 0) return NF_DROP; - ip_send_check(skb->nh.iph); } iph = skb->nh.iph; + ip_send_check(iph); icmph = (struct icmphdr *)((char *)iph+(iph->ihl<<2)); len = ntohs(iph->tot_len) - (iph->ihl<<2); if (len < sizeof(struct icmphdr))