Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4474552ybz; Tue, 28 Apr 2020 11:55:41 -0700 (PDT) X-Google-Smtp-Source: APiQypIxJvvgQPCejjFCQLeIC9HD9S7+QuMEwJE7/4zGhJsBxaXajSBa9+Z60nW74SW3Z/RwZesM X-Received: by 2002:a17:907:2101:: with SMTP id qn1mr27033867ejb.207.1588100141110; Tue, 28 Apr 2020 11:55:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588100141; cv=none; d=google.com; s=arc-20160816; b=ocT2l0aCerQl/fqWuhvqRCGXZW2IPmQsP64H3IYvDb2GT7meLJB6QdDeaiLuPc5ral tkCB/125iQYxhqlDwJi0CraFIwFG8ytZetsfvIhepPTHylmhURV3E+YJXxFPVeq3wA41 Fa7X+aBRRkvsJbEQZVvtbRk/fp/h+bzxgXXCOBDOlfJOoqKtWycrn9x1S1yBttKuVhv0 qrceYfkZQnH/Dy9b9hZoFlwB13xaLuAk3Lv3IEgVIxa8jSQaC8ae1TG+LT1D5vqeOwMc 0hh3tVB3Z9TRIBTAKnwn0+TqeLRuhmDTDcPE7mwKQzflbyBzUFVXDMYZhzi8YYxvWgEm y8ig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=e/viD+TZ9mqyASwPnBpxW+6v4YUcObQdZNwCNMj9CnQ=; b=lBls32woema+ZvFBAwBNIWbOKKmBf205Roh+MvVD4swDcQFcKURX6NY4oKB/fr2+qU Gkxk7Xls+8SkYL3TgMKAXempkagyhmVH7MFdGJrmVqtXGojyQ5hY7S4GeXvcVYph9jlr aDZjDc+rtg5LSLGGypl0ICerzLn6YPyxozSROw0E/IFWYqFA9wUzUjDPFxO4vuSCmpUZ 8rJi2OsPCgPFMvRO16gFOo72wlbLtR32yPivAUhgRc+dkSWMu7ntQ+vRXVSxsKYnJFps CslBAk/kxYcctZQWJYrdG0BBmriAfy3YEpe669Wvx1J+aejyt+smddGbsBUCMHSQrV4m oaIA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ROrD2kjz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w14si1957381edf.402.2020.04.28.11.55.17; Tue, 28 Apr 2020 11:55:41 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ROrD2kjz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730060AbgD1Seb (ORCPT + 99 others); Tue, 28 Apr 2020 14:34:31 -0400 Received: from mail.kernel.org ([198.145.29.99]:51188 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730137AbgD1Se1 (ORCPT ); Tue, 28 Apr 2020 14:34:27 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3B1E621707; Tue, 28 Apr 2020 18:34:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588098866; bh=btOVB0RLFuHhmGmdNI83TsUryhSAp6OgTUHhyiHbk98=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ROrD2kjzvo2P7Sryqhl4tknFicZ13YzWqqJN0PyqybKBxY2AEN8P7vQ0W5xN4QXdo AGs6zvMqm78eec6a1lM00zZPCYE8I14Mp4u6CgSIeRTzbxm3xMbPoujebU5IwCuQPN IjLNRlEAYZann0EQx0eqrR4rRf7vwRNFxNA8Dbk0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Trond Myklebust , Chuck Lever Subject: [PATCH 5.6 122/167] SUNRPC: Fix backchannel RPC soft lockups Date: Tue, 28 Apr 2020 20:24:58 +0200 Message-Id: <20200428182240.699650773@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200428182225.451225420@linuxfoundation.org> References: <20200428182225.451225420@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chuck Lever commit 6221f1d9b63fed6260273e59a2b89ab30537a811 upstream. Currently, after the forward channel connection goes away, backchannel operations are causing soft lockups on the server because call_transmit_status's SOFTCONN logic ignores ENOTCONN. Such backchannel Calls are aggressively retried until the client reconnects. Backchannel Calls should use RPC_TASK_NOCONNECT rather than RPC_TASK_SOFTCONN. If there is no forward connection, the server is not capable of establishing a connection back to the client, thus that backchannel request should fail before the server attempts to send it. Commit 58255a4e3ce5 ("NFSD: NFSv4 callback client should use RPC_TASK_SOFTCONN") was merged several years before RPC_TASK_NOCONNECT was available. Because setup_callback_client() explicitly sets NOPING, the NFSv4.0 callback connection depends on the first callback RPC to initiate a connection to the client. Thus NFSv4.0 needs to continue to use RPC_TASK_SOFTCONN. Suggested-by: Trond Myklebust Signed-off-by: Chuck Lever Cc: # v4.20+ Signed-off-by: Greg Kroah-Hartman --- fs/nfsd/nfs4callback.c | 4 +++- net/sunrpc/svc_xprt.c | 2 ++ net/sunrpc/xprtrdma/svc_rdma_backchannel.c | 2 ++ net/sunrpc/xprtsock.c | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1312,6 +1312,7 @@ nfsd4_run_cb_work(struct work_struct *wo container_of(work, struct nfsd4_callback, cb_work); struct nfs4_client *clp = cb->cb_clp; struct rpc_clnt *clnt; + int flags; if (cb->cb_need_restart) { cb->cb_need_restart = false; @@ -1340,7 +1341,8 @@ nfsd4_run_cb_work(struct work_struct *wo } cb->cb_msg.rpc_cred = clp->cl_cb_cred; - rpc_call_async(clnt, &cb->cb_msg, RPC_TASK_SOFT | RPC_TASK_SOFTCONN, + flags = clp->cl_minorversion ? RPC_TASK_NOCONNECT : RPC_TASK_SOFTCONN; + rpc_call_async(clnt, &cb->cb_msg, RPC_TASK_SOFT | flags, cb->cb_ops ? &nfsd4_cb_ops : &nfsd4_cb_probe_ops, cb); } --- a/net/sunrpc/svc_xprt.c +++ b/net/sunrpc/svc_xprt.c @@ -1028,6 +1028,8 @@ static void svc_delete_xprt(struct svc_x dprintk("svc: svc_delete_xprt(%p)\n", xprt); xprt->xpt_ops->xpo_detach(xprt); + if (xprt->xpt_bc_xprt) + xprt->xpt_bc_xprt->ops->close(xprt->xpt_bc_xprt); spin_lock_bh(&serv->sv_lock); list_del_init(&xprt->xpt_list); --- a/net/sunrpc/xprtrdma/svc_rdma_backchannel.c +++ b/net/sunrpc/xprtrdma/svc_rdma_backchannel.c @@ -242,6 +242,8 @@ static void xprt_rdma_bc_close(struct rpc_xprt *xprt) { dprintk("svcrdma: %s: xprt %p\n", __func__, xprt); + + xprt_disconnect_done(xprt); xprt->cwnd = RPC_CWNDSHIFT; } --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -2714,6 +2714,7 @@ static int bc_send_request(struct rpc_rq static void bc_close(struct rpc_xprt *xprt) { + xprt_disconnect_done(xprt); } /*