Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp3818033pxb; Mon, 4 Oct 2021 10:14:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwGH80fwaHszBVkY1FDrnr2ju7rPcLhc6zVpZmGBNhIBBEHfON3ao/GkYYFo6ZLXzMRU869 X-Received: by 2002:a17:906:4c8c:: with SMTP id q12mr18491499eju.254.1633367665500; Mon, 04 Oct 2021 10:14:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633367665; cv=none; d=google.com; s=arc-20160816; b=t1InSosZuqGNIaLAUMg0K1+aGCMVL8TvvIKyDksLcuGSIk7p1+NaZmNfz7VbjtgVdW vvCugHGZRDe7zZYO3KMSzUDpeVwjf4o6jj39I046Sw6BB1m9ZmCuZ6RxsOevi+CsAEw3 h1wSfeCVWA/fTSdO7R/YYowxos4wsF8aXN00bc8XbnqHQHEQL8N0ZYU5tq5vo1WliRST 6L+ff1mnet3vxDmRSb50dd+ISjYyo27PPmHCFw8KdxYCY8srq+FqSbyrNo6QFqoul/or JekXw3YmkR7LRtqISKxc4a58mwnowRAzCBMGW32g+TJry8Yi2WJrV92Fu5B5aqYq5KfG 74Bw== 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:references:in-reply-to:message-id:date:cc:to:from :subject; bh=K/aaKT9uQcevnC8nQ29a1b96ZXbAfK2mU+plVkR//XM=; b=a4j8cZQBv0l220BsQWINqnLYINvdwdIzvwL6MZZ/3MM190QcOox055wnTal9ntx7E7 1ITJeBcfu4cC4rh4MaGq6d+/7boAkYPXGk6zj76avaLhNHcsAXa6gqahOb6kLUvQyfYL BuUfGCNftQ5IBpZD1qWyWv2j9evxxlu2YU6CGCXV9jcFDRI681FA+j+i8N129VQb7vth 2DZKOijUUTb/UpECdmbsnTiJ/p8hEJA+qt56BPqcT0rg2CBT9+l2G7jjasJbZIHO55C7 kSB7LrpDduX6c5te3P3nYpXZ7mCHM+1tpcCfCa1D9dksIOb8xHAuczYshYjfM8co/X0P odZw== 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 j9si18513869ejn.701.2021.10.04.10.14.01; Mon, 04 Oct 2021 10:14:25 -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 S233520AbhJDOSE (ORCPT + 99 others); Mon, 4 Oct 2021 10:18:04 -0400 Received: from mail.kernel.org ([198.145.29.99]:47388 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233188AbhJDOSE (ORCPT ); Mon, 4 Oct 2021 10:18:04 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 002F161216; Mon, 4 Oct 2021 14:16:14 +0000 (UTC) Subject: [PATCH 2/5] svcrdma: Split the svcrdma_wc_send() tracepoint From: Chuck Lever To: bfields@fieldses.org Cc: linux-nfs@vger.kernel.org, linux-rdma@vger.kernel.org Date: Mon, 04 Oct 2021 10:16:14 -0400 Message-ID: <163335697430.3921.17921189314933717768.stgit@klimt.1015granger.net> In-Reply-To: <163335690747.3921.13072315880207206379.stgit@klimt.1015granger.net> References: <163335690747.3921.13072315880207206379.stgit@klimt.1015granger.net> User-Agent: StGit/1.3 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 There are currently three separate purposes being served by a single tracepoint here. They need to be split up. svcrdma_wc_send: - status is always zero, so there's no value in recording it. - vendor_err is meaningless unless status is not zero, so there's no value in recording it. - This tracepoint is needed only when developing modifications, so it should be left disabled most of the time. svcrdma_wc_send_flush: - As above, needed only rarely, and not an error. svcrdma_wc_send_err: - This tracepoint can be left persistently enabled because completion errors are run-time problems (except for FLUSHED_ERR). - Tracepoint name now ends in _err to reflect its purpose. Signed-off-by: Chuck Lever --- include/trace/events/rpcrdma.h | 72 +++++++++++++++++++++++++++++++++ net/sunrpc/xprtrdma/svc_rdma_sendto.c | 14 +++++- 2 files changed, 82 insertions(+), 4 deletions(-) diff --git a/include/trace/events/rpcrdma.h b/include/trace/events/rpcrdma.h index 342d6d7b5cd9..1d7c12f65f87 100644 --- a/include/trace/events/rpcrdma.h +++ b/include/trace/events/rpcrdma.h @@ -60,6 +60,74 @@ DECLARE_EVENT_CLASS(rpcrdma_completion_class, ), \ TP_ARGS(wc, cid)) +DECLARE_EVENT_CLASS(rpcrdma_send_completion_class, + TP_PROTO( + const struct ib_wc *wc, + const struct rpc_rdma_cid *cid + ), + + TP_ARGS(wc, cid), + + TP_STRUCT__entry( + __field(u32, cq_id) + __field(int, completion_id) + ), + + TP_fast_assign( + __entry->cq_id = cid->ci_queue_id; + __entry->completion_id = cid->ci_completion_id; + ), + + TP_printk("cq.id=%u cid=%d", + __entry->cq_id, __entry->completion_id + ) +); + +#define DEFINE_SEND_COMPLETION_EVENT(name) \ + DEFINE_EVENT(rpcrdma_send_completion_class, name, \ + TP_PROTO( \ + const struct ib_wc *wc, \ + const struct rpc_rdma_cid *cid \ + ), \ + TP_ARGS(wc, cid)) + +DECLARE_EVENT_CLASS(rpcrdma_send_flush_class, + TP_PROTO( + const struct ib_wc *wc, + const struct rpc_rdma_cid *cid + ), + + TP_ARGS(wc, cid), + + TP_STRUCT__entry( + __field(u32, cq_id) + __field(int, completion_id) + __field(unsigned long, status) + __field(unsigned int, vendor_err) + ), + + TP_fast_assign( + __entry->cq_id = cid->ci_queue_id; + __entry->completion_id = cid->ci_completion_id; + __entry->status = wc->status; + __entry->vendor_err = wc->vendor_err; + ), + + TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", + __entry->cq_id, __entry->completion_id, + rdma_show_wc_status(__entry->status), + __entry->status, __entry->vendor_err + ) +); + +#define DEFINE_SEND_FLUSH_EVENT(name) \ + DEFINE_EVENT(rpcrdma_send_flush_class, name, \ + TP_PROTO( \ + const struct ib_wc *wc, \ + const struct rpc_rdma_cid *cid \ + ), \ + TP_ARGS(wc, cid)) + DECLARE_EVENT_CLASS(rpcrdma_mr_completion_class, TP_PROTO( const struct ib_wc *wc, @@ -1939,7 +2007,9 @@ TRACE_EVENT(svcrdma_post_send, ) ); -DEFINE_COMPLETION_EVENT(svcrdma_wc_send); +DEFINE_SEND_COMPLETION_EVENT(svcrdma_wc_send); +DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_send_flush); +DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_send_err); TRACE_EVENT(svcrdma_post_recv, TP_PROTO( diff --git a/net/sunrpc/xprtrdma/svc_rdma_sendto.c b/net/sunrpc/xprtrdma/svc_rdma_sendto.c index 599021b2391d..22a871e6fe4d 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_sendto.c +++ b/net/sunrpc/xprtrdma/svc_rdma_sendto.c @@ -280,13 +280,21 @@ static void svc_rdma_wc_send(struct ib_cq *cq, struct ib_wc *wc) struct svc_rdma_send_ctxt *ctxt = container_of(cqe, struct svc_rdma_send_ctxt, sc_cqe); - trace_svcrdma_wc_send(wc, &ctxt->sc_cid); - svc_rdma_wake_send_waiters(rdma, 1); complete(&ctxt->sc_done); if (unlikely(wc->status != IB_WC_SUCCESS)) - svc_xprt_deferred_close(&rdma->sc_xprt); + goto flushed; + + trace_svcrdma_wc_send(wc, &ctxt->sc_cid); + return; + +flushed: + if (wc->status != IB_WC_WR_FLUSH_ERR) + trace_svcrdma_wc_send_err(wc, &ctxt->sc_cid); + else + trace_svcrdma_wc_send_flush(wc, &ctxt->sc_cid); + svc_xprt_deferred_close(&rdma->sc_xprt); } /**