• Xiaotian Feng's avatar
    sunrpc: fix peername failed on closed listener · b292cf9c
    Xiaotian Feng authored
    There're some warnings of "nfsd: peername failed (err 107)!"
    socket error -107 means Transport endpoint is not connected.
    This warning message was outputed by svc_tcp_accept() [net/sunrpc/svcsock.c],
    when kernel_getpeername returns -107. This means socket might be CLOSED.
    
    And svc_tcp_accept was called by svc_recv() [net/sunrpc/svc_xprt.c]
    
            if (test_bit(XPT_LISTENER, &xprt->xpt_flags)) {
            <snip>
                    newxpt = xprt->xpt_ops->xpo_accept(xprt);
            <snip>
    
    So this might happen when xprt->xpt_flags has both XPT_LISTENER and XPT_CLOSE.
    
    Let's take a look at commit b0401d72, this commit has moved the close
    processing after do recvfrom method, but this commit also introduces this
    warnings, if the xpt_flags has both XPT_LISTENER and XPT_CLOSED, we should
    close it, not accpet then close.
    Signed-off-by: default avatarXiaotian Feng <dfeng@redhat.com>
    Cc: J. Bruce Fields <bfields@fieldses.org>
    Cc: Neil Brown <neilb@suse.de>
    Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: stable@kernel.org
    Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
    b292cf9c
svc_xprt.c 32.5 KB