Return-Path: linux-nfs-owner@vger.kernel.org Received: from mail-pd0-f178.google.com ([209.85.192.178]:50162 "EHLO mail-pd0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757535AbaAJClc (ORCPT ); Thu, 9 Jan 2014 21:41:32 -0500 Received: by mail-pd0-f178.google.com with SMTP id y10so3957259pdj.23 for ; Thu, 09 Jan 2014 18:41:31 -0800 (PST) Message-ID: <52CF5DD4.3080409@gmail.com> Date: Fri, 10 Jan 2014 10:41:24 +0800 From: Kinglong Mee MIME-Version: 1.0 To: Trond Myklebust , Dr Fields James Bruce CC: Linux NFS Mailing List Subject: Re: [PATCH 4/5] NFSD/SUNRPC: Check rpc_xprt out of xs_setup_bc_tcp References: <52CA7862.1020203@gmail.com> <20140106184926.GC31764@fieldses.org> <24D159B0-C13D-43A6-B307-2B967E154353@primarydata.com> <20140106225346.GB3342@fieldses.org> <52CB8B79.6040907@gmail.com> <52CE7A76.3080101@gmail.com> <52CE7AE6.4010603@gmail.com> <20140109162633.GB14308@fieldses.org> In-Reply-To: Content-Type: text/plain; charset=windows-1252 Sender: linux-nfs-owner@vger.kernel.org List-ID: On 01/10/2014 01:27 AM, Trond Myklebust wrote: > > On Jan 9, 2014, at 11:26, Dr Fields James Bruce wrote: > >> On Thu, Jan 09, 2014 at 06:33:10PM +0800, Kinglong Mee wrote: >>> Besides checking rpc_xprt out of xs_setup_bc_tcp, >>> increase it's reference (it's important). >> >> This sounds wrong to me: the presence of a backchannel can't prevent the >> client's connection from going away. Instead, when the connection dies, >> any associated backchannels should be immediately destroyed. > > Hi Bruce, > > The right way to deal with this is to have knfsd shut down the rpc_client > when it detects the TCP disconnection event. Yes, that's right. Knfsd has do it as you said. When getting xprt's status of XPT_CLOSE in svc_recv/svc_handle_xprt, knfsd will delete the xprt by svc_delete_xprt. In svc_delete_xprt, knfsd calls call_xpt_users to notify those users of the xprt. So, nfsd4_conn_lost will be called to free the connection. After freeing connection, nfsd4_probe_callback will update the callback for the client. And, the clp->cl_cb_client will be shutdown in nfsd4_process_cb_update. At last, all using of the xprt will be released. I have test it, that's OK. > The xprt->count shouldn?t be an issue here: > it has nothing to do with the socket connection state. The xprt of backchannel, there are two references, 1. rpc_clnt 2. svc_xprt For rpc_clnt, initialize the xprt->count in xs_setup_bc_tcp, or increase it in create_backchannel_client, and, decrease in rpc_free_client. For svc_xprt, increase it in xs_setup_bc_tcp, and decrease in svc_xprt_free. thanks, Kinglong Mee