• Chuck Lever's avatar
    SUNRPC: Check explicitly for tk_status == 0 in call_transmit_status() · 206a134b
    Chuck Lever authored
    The success case, where task->tk_status == 0, is by far the most
    frequent case in call_transmit_status().
    
    The default: arm of the switch statement in call_transmit_status()
    handles the 0 case.  default: was moved close to the top of the switch
    statement in call_transmit_status() under the theory that the compiler
    places object code for the earliest arms of a switch statement first,
    making the CPU do less work.
    
    The default: arm of a switch statement, however, is executed only
    after all the other cases have been checked.  Even if the compiler
    rearranges the object code, the default: arm is the "last resort",
    meaning all of the other cases have been explicitly exhausted.  That
    makes the current arrangement about as inefficient as it gets for the
    common case.
    
    To fix this, add an explicit check for zero before the switch
    statement.  That forces the compiler to do the zero check first, no
    matter what optimizations it might try to do to the switch statement.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    206a134b
clnt.c 42 KB