• Neil Brown's avatar
    nfsd: ensure sockets are closed on error · 301e99ce
    Neil Brown authored
    One the changes in commit d7979ae4 "svc: Move close processing to a
    single place" is:
    
      err_delete:
    -       svc_delete_socket(svsk);
    +       set_bit(SK_CLOSE, &svsk->sk_flags);
            return -EAGAIN;
    
    This is insufficient. The recvfrom methods must always call
    svc_xprt_received on completion so that the socket gets re-queued if
    there is any more work to do.  This particular path did not make that
    call because it actually destroyed the svsk, making requeue pointless.
    When the svc_delete_socket was change to just set a bit, we should have
    added a call to svc_xprt_received,
    
    This is the problem that b0401d72 attempted to fix, incorrectly.
    Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
    301e99ce
svcsock.c 40.5 KB