• Trond Myklebust's avatar
    RPC: Fix the TCP resend semantics for NFSv4 · 241c39b9
    Trond Myklebust authored
    Fix a regression due to the patch "NFS: disconnect before retrying NFSv4
    requests over TCP"
    
    The assumption made in xprt_transmit() that the condition
    	"req->rq_bytes_sent == 0 and request is on the receive list"
    should imply that we're dealing with a retransmission is false.
    Firstly, it may simply happen that the socket send queue was full
    at the time the request was initially sent through xprt_transmit().
    Secondly, doing this for each request that was retransmitted implies
    that we disconnect and reconnect for _every_ request that happened to
    be retransmitted irrespective of whether or not a disconnection has
    already occurred.
    
    Fix is to move this logic into the call_status request timeout handler.
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    241c39b9
xprt.c 25.7 KB