• Andi Kleen's avatar
    [PATCH] Fix IP checksum for SuSE 9.0 compiler · 6077b1d3
    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
checksum.h 4.63 KB