Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3009221pxb; Fri, 12 Feb 2021 07:06:10 -0800 (PST) X-Google-Smtp-Source: ABdhPJytst7cDHIpDTMVThFxF0F3AvkN3O/CfSMzkjrE1WCuFrNb3yGoeFzG5jEAPzrlErXOuhUh X-Received: by 2002:a17:906:1a11:: with SMTP id i17mr3517043ejf.278.1613142370571; Fri, 12 Feb 2021 07:06:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613142370; cv=none; d=google.com; s=arc-20160816; b=s59+2VHQ6zoCvG3R7pnn0C97EJqUZvGHHMikzQW+3AVr4/aZe6FkTzoVdXtTzoi6xw AvtmfMH+8yUL66Lwi0SeuXLAQ1gC/wywtdxFxZcNwof6yqApr7PgqTakWSplaNxzlV90 XWvOhMhbfjCRohcQILw7XBDKyT9/OCqdZ0obxBt2y6espRFy3c4M83QxbECX9lgCOSXD 6h95XeOIfTAOwDUvp5dAabwHsWkLvXA1KTcI/oFacVZrc4Ja87l08ibtcixNCqI97lT9 UMg74uCN4KFZbsYmL7yDIvpCXDeLV9JPIe9MosG/+plUZfMORyGYv6FuLczI5gqiDAMX eLOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:message-id:date:to:from:subject; bh=T+So4h5wzFO4AkZjjqfQthIRQwBlK19egAHnN+StOh4=; b=LiJ75ACyhAYiWnLeBnAwsNOtbaoeLUbF3J+0HPmMoYg61/zbn1RDwxvoHExRmfbc1u Lcvjv3qL3NK6nbxJShzeiDqe0iiD6MNO47zv6QdrO0vRv1/s6dX0fVBQPz8DabFgoWwR je9VRhrP+NBj6rSwF7jP7d+sxw0wjGDeU9FQZFR+ill2FYVbg4C/RlDfSoYdFYKH8lrW 4zZOSPrAvM0ys4ey3t0R0Oc04XpRsm+MCtkwJFPxwwyE/ca7mx+2LmfRBPZ4z86U82a/ MXTmt+Wil/Y7QYVBdKfm5yLPEPKf9+PsXCQhrMFyraBPgvbfwcArc8mEpsYETWDraozQ HlXQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d3si6421792edy.16.2021.02.12.07.05.38; Fri, 12 Feb 2021 07:06:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229660AbhBLPEi (ORCPT + 99 others); Fri, 12 Feb 2021 10:04:38 -0500 Received: from mail.kernel.org ([198.145.29.99]:51394 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229465AbhBLPEh (ORCPT ); Fri, 12 Feb 2021 10:04:37 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id F0AD664E57; Fri, 12 Feb 2021 15:03:56 +0000 (UTC) Subject: [PATCH v2] svcrdma: Hold private mutex while invoking rdma_accept() From: Chuck Lever To: linux-nfs@vger.kernel.org, linux-rdma@vger.kernel.org Date: Fri, 12 Feb 2021 10:03:56 -0500 Message-ID: <161314223614.4643.16470136253837190113.stgit@klimt.1015granger.net> User-Agent: StGit/1.0 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org RDMA core mutex locking was restructured by d114c6feedfe ("RDMA/cma: Add missing locking to rdma_accept()") [Aug 2020]. When lock debugging is enabled, the RPC/RDMA server trips over the new lockdep assertion in rdma_accept() because it doesn't call rdma_accept() from its CM event handler. As a temporary fix, have svc_rdma_accept() take the handler_mutex explicitly. In the meantime, let's consider how to restructure the RPC/RDMA transport to invoke rdma_accept() from the proper context. Calls to svc_rdma_accept() are serialized with calls to svc_rdma_free() by the generic RPC server layer. Suggested-by: Jason Gunthorpe Link: https://lore.kernel.org/linux-rdma/20210209154014.GO4247@nvidia.com/ Fixes: d114c6feedfe ("RDMA/cma: Add missing locking to rdma_accept()") Signed-off-by: Chuck Lever --- net/sunrpc/xprtrdma/svc_rdma_transport.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c index afba4e9d5425..c895f80df659 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_transport.c +++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c @@ -475,9 +475,6 @@ static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt) if (!svc_rdma_post_recvs(newxprt)) goto errout; - /* Swap out the handler */ - newxprt->sc_cm_id->event_handler = svc_rdma_cma_handler; - /* Construct RDMA-CM private message */ pmsg.cp_magic = rpcrdma_cmp_magic; pmsg.cp_version = RPCRDMA_CMP_VERSION; @@ -498,7 +495,10 @@ static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt) } conn_param.private_data = &pmsg; conn_param.private_data_len = sizeof(pmsg); + rdma_lock_handler(newxprt->sc_cm_id); + newxprt->sc_cm_id->event_handler = svc_rdma_cma_handler; ret = rdma_accept(newxprt->sc_cm_id, &conn_param); + rdma_unlock_handler(newxprt->sc_cm_id); if (ret) { trace_svcrdma_accept_err(newxprt, ret); goto errout;