• Neil Brown's avatar
    sunrpc: centralise most calls to svc_xprt_received · b48fa6b9
    Neil Brown authored
    svc_xprt_received must be called when ->xpo_recvfrom has finished
    receiving a message, so that the XPT_BUSY flag will be cleared and
    if necessary, requeued for further work.
    
    This call is currently made in each ->xpo_recvfrom function, often
    from multiple different points.  In each case it is the earliest point
    on a particular path where it is known that the protection provided by
    XPT_BUSY is no longer needed.
    
    However there are (still) some error paths which do not call
    svc_xprt_received, and requiring each ->xpo_recvfrom to make the call
    does not encourage robustness.
    
    So: move the svc_xprt_received call to be made just after the
    call to ->xpo_recvfrom(), and move it of the various ->xpo_recvfrom
    methods.
    
    This means that it may not be called at the earliest possible instant,
    but this is unlikely to be a measurable performance issue.
    
    Note that there are still other calls to svc_xprt_received as it is
    also needed when an xprt is newly created.
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
    b48fa6b9
svc_rdma_recvfrom.c 19.7 KB