diff options
Diffstat (limited to 'net/ipv4/ipvs/ip_vs_proto_tcp.c')
-rw-r--r-- | net/ipv4/ipvs/ip_vs_proto_tcp.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/ipv4/ipvs/ip_vs_proto_tcp.c b/net/ipv4/ipvs/ip_vs_proto_tcp.c index de8ed73997c7..808e8be0280a 100644 --- a/net/ipv4/ipvs/ip_vs_proto_tcp.c +++ b/net/ipv4/ipvs/ip_vs_proto_tcp.c | |||
@@ -166,7 +166,7 @@ tcp_snat_handler(struct sk_buff *skb, | |||
166 | tcph->source = cp->vport; | 166 | tcph->source = cp->vport; |
167 | 167 | ||
168 | /* Adjust TCP checksums */ | 168 | /* Adjust TCP checksums */ |
169 | if (!cp->app) { | 169 | if (!cp->app && (tcph->check != 0)) { |
170 | /* Only port and addr are changed, do fast csum update */ | 170 | /* Only port and addr are changed, do fast csum update */ |
171 | tcp_fast_csum_update(cp->af, tcph, &cp->daddr, &cp->vaddr, | 171 | tcp_fast_csum_update(cp->af, tcph, &cp->daddr, &cp->vaddr, |
172 | cp->dport, cp->vport); | 172 | cp->dport, cp->vport); |
@@ -235,7 +235,7 @@ tcp_dnat_handler(struct sk_buff *skb, | |||
235 | /* | 235 | /* |
236 | * Adjust TCP checksums | 236 | * Adjust TCP checksums |
237 | */ | 237 | */ |
238 | if (!cp->app) { | 238 | if (!cp->app && (tcph->check != 0)) { |
239 | /* Only port and addr are changed, do fast csum update */ | 239 | /* Only port and addr are changed, do fast csum update */ |
240 | tcp_fast_csum_update(cp->af, tcph, &cp->vaddr, &cp->daddr, | 240 | tcp_fast_csum_update(cp->af, tcph, &cp->vaddr, &cp->daddr, |
241 | cp->vport, cp->dport); | 241 | cp->vport, cp->dport); |