Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp1429339pxb; Tue, 17 Aug 2021 11:26:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwFJ8ChqfDtmbe/EE0/a1PDUlmw0FmEhsafK2pFuFN8Z8I7KU914KpqaWHLPA+97dCRdo1J X-Received: by 2002:aa7:d147:: with SMTP id r7mr5519747edo.148.1629224779352; Tue, 17 Aug 2021 11:26:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629224779; cv=none; d=google.com; s=arc-20160816; b=gMIi9sUlqTHdXeD5k3dWTeIX04F8m3M03a+lqKRB9Y/0X/O5czuAYMIbVxItmsufc+ 0hCOhiz3KVOiEpKbYxgGfre3uCwBdpfj/SZAl0P7FDuXxSmI8JGwT1mEKJKk1pIVl/qt c2OabHbMZQOd7sKBB88zLzUmCiyDAwEV8NZGTPoKwkx3GUuSysAyFjfCKsyvHEt2K7WH diNEqR8AH6HX1T6yTuom9Esl7DwQoy2Xp9anbS7BMWy6fQiNQHx6R3YICZijTCAuN7YD 6LgXYGlvcksrZeeYgbskc9c/wqmstxXzSYI9K41BjoQ9L9B59maNA1ewx+fLxbrEPqHB ey8g== 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:cc:to:from:subject; bh=7wwcMxlOXI1/WBbq0MePYf2eWFrMw6TIHQ+hJsSxs/A=; b=guKKjBH0PYpM0zc1Dl0Tt8uwNLBWCFwhlf10A3MYwoj5hR8qvi3uDS7TJjlZPQW80f 3P2HnvAlw9XYkZHEpdzZNYy+wIR4tA3oLWgkvVjEy8dpOD6UToPFHnSZAH6ZoVTsX+L/ vLI6bKXax/9tllvVKvPtc0DdZHZbj20hCrhr2WxOBlEms9KTXuQ5FBr3QUtQO5aysRO0 oABCtnk80dnusFB88useIANPAMdr6wDxGRZSXFxvfbLMXKcelF6ffGop0GkY8JsFRCC9 2kRajNRkqft2wXw0fLmYLKE0uWtvhKMrz6yiQQFblNzW1ycCxHqyhbWq8Xld/w54N8Bv uqtQ== 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 jz9si3620013ejb.406.2021.08.17.11.25.42; Tue, 17 Aug 2021 11:26:19 -0700 (PDT) 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 S233059AbhHQSZ2 (ORCPT + 99 others); Tue, 17 Aug 2021 14:25:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:46580 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232301AbhHQSZ0 (ORCPT ); Tue, 17 Aug 2021 14:25:26 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id D8AA4601FE; Tue, 17 Aug 2021 18:24:52 +0000 (UTC) Subject: [PATCH RFC] xprtrdma: Move initial Receive posting From: Chuck Lever To: haakon.bugge@oracle.com Cc: linux-rdma@vger.kernel.org, linux-nfs@vger.kernel.org Date: Tue, 17 Aug 2021 14:24:51 -0400 Message-ID: <162922469165.515267.14848799693507242987.stgit@manet.1015granger.net> User-Agent: StGit/1.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org HÃ¥kon Bugge points out that rdma_create_qp() is not supposed to return a QP that is ready for Receives to be posted. It so happens that ours does that, but the IBTA spec (12.9.7.1) states that a transition to INIT happens only after REQ has been sent. In future kernels, QPs returned from rdma_create_qp() might not be in a state where posting Receives will succeed. This patch is a pre-requisite to changing the legacy behavior of rdma_create_qp(). The first available moment after cm_send_req where xprtrdma can post Receives is when the RDMA core reports the QP connection has been established. Note that xprtrdma has posted Receives just after rdma_create_qp() since 8d4fb8ff427a ("xprtrdma: Fix disconnect regression"). To avoid regressing 8d4fb8ff427a, xprtrdma needs to ensure that initial Receive WRs are posted before pending RPCs are awoken. It appears that the current logic does provide that guarantee. Signed-off-by: Chuck Lever --- net/sunrpc/xprtrdma/verbs.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c index aaec3c9be8db..87ae62cdea18 100644 --- a/net/sunrpc/xprtrdma/verbs.c +++ b/net/sunrpc/xprtrdma/verbs.c @@ -520,12 +520,6 @@ int rpcrdma_xprt_connect(struct rpcrdma_xprt *r_xprt) xprt_clear_connected(xprt); rpcrdma_reset_cwnd(r_xprt); - /* Bump the ep's reference count while there are - * outstanding Receives. - */ - rpcrdma_ep_get(ep); - rpcrdma_post_recvs(r_xprt, 1, true); - rc = rdma_connect(ep->re_id, &ep->re_remote_cma); if (rc) goto out; @@ -539,6 +533,12 @@ int rpcrdma_xprt_connect(struct rpcrdma_xprt *r_xprt) goto out; } + /* Bump the ep's reference count while there are + * outstanding Receives. + */ + rpcrdma_ep_get(ep); + rpcrdma_post_recvs(r_xprt, 1, true); + rc = rpcrdma_sendctxs_create(r_xprt); if (rc) { rc = -ENOTCONN;