-
Andi Kleen authored
The hammer branch based gcc 3.3 in SuSE 9.0 has a more aggressive optimizer. ip_send_check has this code: iph->check = 0; iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl); The new gcc optimizes the first store away because it doesn't know that ip_fast_csum reads its input memory. This leads to occassionally packets with wrong IP header checksum getting sent; this happens especially with NFS. Fixing it in the constraints would have been ugly and probably not future proof, so this patch just adds a memory clobber to ip_fast_csum. For some reason the issue only hits in 2.6, we haven't seen it in 2.4. Problem occurs on both i386 and x86-64. Credit goes to Olaf Kirch for tracking this down.
6077b1d3