lkml.org 
[lkml]   [2010]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[176/197] nfsd: ensure sockets are closed on error
    2.6.32-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Neil Brown <neilb@suse.de>

    commit 301e99ce4a2f42a317129230fd42e6cd874c64b0 upstream.

    One the changes in commit d7979ae4a "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 b0401d7253 attempted to fix, incorrectly.

    Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    net/sunrpc/svcsock.c | 1 +
    1 file changed, 1 insertion(+)

    --- a/net/sunrpc/svcsock.c
    +++ b/net/sunrpc/svcsock.c
    @@ -968,6 +968,7 @@ static int svc_tcp_recv_record(struct sv
    return len;
    err_delete:
    set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags);
    + svc_xprt_received(&svsk->sk_xprt);
    err_again:
    return -EAGAIN;
    }



    \
     
     \ /
      Last update: 2010-04-22 21:39    [W:5.410 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site