• Ricardo Labiaga's avatar
    nfs41: Implement NFSv4.1 callback service process. · a43cde94
    Ricardo Labiaga authored
    nfs41_callback_up() initializes the necessary queues and creates the new
    nfs41_callback_svc thread.  This thread executes the callback service which
    waits for requests to arrive on the svc_serv->sv_cb_list.
    
    NFS41_BC_MIN_CALLBACKS is set to 1 because we expect callbacks to not
    cause substantial latency.
    
    The actual processing of the callback will be implemented as a separate patch.
    
    There is only one NFSv4.1 callback service.  The first caller of
    nfs4_callback_up() creates the service, subsequent callers increment a
    reference count on the service.  The service is destroyed when the last
    caller invokes nfs_callback_down().
    
    The transport needs to hold a reference to the callback service in order
    to invoke it during callback processing.  Currently this reference is only
    obtained when the service is first created.  This is incorrect, since
    subsequent registrations for other transports will leave the xprt->serv
    pointer uninitialized, leading to an oops when a callback arrives on
    the "unreferenced" transport.
    
    This patch fixes the problem by ensuring that a reference to the service
    is saved in xprt->serv, either because the service is created by this
    invocation to nfs4_callback_up() or by a prior invocation.
    Signed-off-by: default avatarRicardo Labiaga <Ricardo.Labiaga@netapp.com>
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    [nfs41: Add a reference to svc_serv during callback service bring up]
    Signed-off-by: default avatarRicardo Labiaga <Ricardo.Labiaga@netapp.com>
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    [Type check arguments of nfs_callback_up]
    Signed-off-by: default avatarRicardo Labiaga <Ricardo.Labiaga@netapp.com>
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    [nfs41: save svc_serv in nfs_callback_info]
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    [Removal of ugly #ifdefs]
    [nfs41: Update to removal of ugly #ifdefs]
    Signed-off-by: default avatarRicardo Labiaga <Ricardo.Labiaga@netapp.com>
    Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
    a43cde94
callback.h 1.78 KB