Skip to content
  • Ricardo Labiaga's avatar
    nfs41: New backchannel helper routines · fb7a0b9a
    Ricardo Labiaga authored
    
    
    This patch introduces support to setup the callback xprt on the client side.
    It allocates/ destroys the preallocated memory structures used to process
    backchannel requests.
    
    At setup time, xprt_setup_backchannel() is invoked to allocate one or
    more rpc_rqst structures and substructures.  This ensures that they
    are available when an RPC callback arrives.  The rpc_rqst structures
    are maintained in a linked list attached to the rpc_xprt structure.
    We keep track of the number of allocations so that they can be correctly
    removed when the channel is destroyed.
    
    When an RPC callback arrives, xprt_alloc_bc_request() is invoked to
    obtain a preallocated rpc_rqst structure.  An rpc_xprt structure is
    returned, and its RPC_BC_PREALLOC_IN_USE bit is set in
    rpc_xprt->bc_flags.  The structure is removed from the the list
    since it is now in use, and it will be later added back when its
    user is done with it.
    
    After the RPC callback replies, the rpc_rqst structure is returned
    by invoking xprt_free_bc_request().  This clears the
    RPC_BC_PREALLOC_IN_USE bit and adds it back to the list, allowing it
    to be reused by a subsequent RPC callback request.
    
    To be consistent with the reception of RPC messages, the backchannel requests
    should be placed into the 'struct rpc_rqst' rq_rcv_buf, which is then in turn
    copied to the 'struct rpc_rqst' rq_private_buf.
    
    [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>
    [Update copyright notice and explain page allocation]
    Signed-off-by: default avatarRicardo Labiaga <Ricardo.Labiaga@netapp.com>
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    fb7a0b9a