• Ricardo Labiaga's avatar
    nfs41: New xs_tcp_read_data() · 44b98efd
    Ricardo Labiaga authored
    Handles RPC replies and backchannel callbacks.  Traditionally the NFS
    client has expected only RPC replies on its open connections.  With
    NFSv4.1, callbacks can arrive over an existing open connection.
    
    This patch refactors the old xs_tcp_read_request() into an RPC reply handler:
    xs_tcp_read_reply(), a new backchannel callback handler: xs_tcp_read_callback(),
    and a common routine to read the data off the transport: xs_tcp_read_common().
    The new xs_tcp_read_callback() queues callback requests onto a queue where
    the callback service (a separate thread) is listening for the processing.
    
    This patch incorporates work and suggestions from Rahul Iyer (iyer@netapp.com)
    and Benny Halevy (bhalevy@panasas.com).
    
    xs_tcp_read_callback() drops the connection when the number of expected
    callbacks is exceeded.  Use xprt_force_disconnect(), ensuring tasks on
    the pending queue are awaken on disconnect.
    
    [nfs41: Keep track of RPC call/reply direction with a flag]
    [nfs41: Preallocate rpc_rqst receive buffer for handling callbacks]
    Signed-off-by: default avatarRicardo Labiaga <ricardo.labiaga@netapp.com>
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    [nfs41: sunrpc: xs_tcp_read_callback() should use xprt_force_disconnect()]
    Signed-off-by: default avatarRicardo Labiaga <Ricardo.Labiaga@netapp.com>
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    [Moves embedded #ifdefs into #ifdef function blocks]
    Signed-off-by: default avatarRicardo Labiaga <Ricardo.Labiaga@netapp.com>
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    44b98efd
xprtsock.c 61.6 KB