Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp2614037ybv; Mon, 24 Feb 2020 08:23:37 -0800 (PST) X-Google-Smtp-Source: APXvYqzKBUiGlDJUaJx+J/xwI5LzlCfx7s9agW4btQDiJQtBK4EfcreJY2DniWSMyQbTbRtR6jLX X-Received: by 2002:a9d:6a06:: with SMTP id g6mr37759063otn.305.1582561417292; Mon, 24 Feb 2020 08:23:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582561417; cv=none; d=google.com; s=arc-20160816; b=dw1Yz+8QY6ROh4Rt5EG4RIdAL/2z0O1utC+zVY/RBgYwlQn8dBfCRnR0Jigccj5CoS CVRUilJJ1xnhqnqCG76yAAjyJRiPsGY6tvVRiTYKdqx07aeAN7rjyX2MG494UDo7gYvT YGxrE1TpQRFm1wow9P7XMWQuAwwPE//ydEzyI4Bj4fbSSlqLjNbhXKt+t4CMS95ylqLX 2yNDqSu/XxXpxMXUHBpkajkHKIbCIbk6+mV0zrti3W2cGnhMtZtp/z2eBcBdodjO5u/0 HjpVcp9TWeuN5DQeuISQlyQS0bcD0nc5eYZHgWT/2vIi6TE44A9pquLvTFcZWftzrVZ/ XFgQ== 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:date:cc:to:from:subject :message-id:dkim-signature; bh=JKFloTrnvvkBfQi6bk9yfofPn3a4XzOXDJmzLd62kaM=; b=wSx+WvHQsF6ekWW+T1lfHOWrMapbO5E9NlLkGOwCjh5iTQIvkRes8LvtMRBZJyZfZH joCotQ2ay8NFB/RqOtYhpq0T7p03vSVW+XIdBcengLoTwRgp4O8AVWKzA4cXIg4WFdsE 5eakx/RogD8RTRDaXmYRjNFpW3EECw4UcJAGgttJA+sFNjwJyQ2zGw4Fu/u7obL/LdEn yPGO5+O6lkw19gAicxr9vQ7zSK7ZnGLQE0H3BPcAa14wA+NENj5VH6/8cG/W2tyNqjbu JqfyVQcafB2ii1tMEkIWEOpUlWRpbJUp5XcB83GR/iLABqAJV/ApJKah6U2/yZuzNZJh lDPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=VWzYfBDP; spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r3si6099954otp.292.2020.02.24.08.23.25; Mon, 24 Feb 2020 08:23:37 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=VWzYfBDP; spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727706AbgBXQXT (ORCPT + 99 others); Mon, 24 Feb 2020 11:23:19 -0500 Received: from mail-il1-f196.google.com ([209.85.166.196]:34611 "EHLO mail-il1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727378AbgBXQXS (ORCPT ); Mon, 24 Feb 2020 11:23:18 -0500 Received: by mail-il1-f196.google.com with SMTP id l4so8226233ilj.1; Mon, 24 Feb 2020 08:23:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=JKFloTrnvvkBfQi6bk9yfofPn3a4XzOXDJmzLd62kaM=; b=VWzYfBDP7x05AL+enhEDXWBfowG7SdNogbAh/8f04QeYpCrL9+3UIDYuOWMduJzKQS xaM5vF0Dvtmn8T0xeyDQFu7pTYTOWg5JT2kThCFte7jJoBO34z9rq7MtFLSUiJ5vppZW VDIem6liPs4CArSwTYdreCOP3bircM1181H3ubYHoOO9WJ5/CMoxSfStVv4VAptJsekm mMlPCOfqPkS60rWxvgFxgTQ1yHIZTA9OJnA97Xh2+PWX0/WAePOF7dchTDWlT5EQLq9K IcRh9HA4EY0E0AjdJXUiR87O7KJkko6JkWzM+VaKLb+Li6oOrcXfd8cxCjdDCVX50yBk YMSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:message-id:subject:from:to:cc:date :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=JKFloTrnvvkBfQi6bk9yfofPn3a4XzOXDJmzLd62kaM=; b=hfeQJutPj4s4ZJK+JlegWkg74A5iXY6Jlepozsvj4D8cDSJRBqbnm8wXtdmGLsWLAd VcBAdZYd66skcrdCBsfhqFWlzuWpaebl++Bmlm9PEIjgTD+SIz8PVLWvVzV3Yhy7WCos yo9B2jMztPDz/wTXxR/amsHAX5d9xxcT5aqifZ6C+DVgTDC9ulYqzwIGI1i+63CNQKFW 2ZlwZv11Qex0ym+Kxg4MQc6oKcJf08JenhT2k0bKGcfMfETLeMt/yplW71k1Gm5gzvCo 1pkvwpmOuKOyHwi7ccDUl1mPKiRV1WvkwiiWyxC3yNDGunfEwdxwhLI/hjbMbRLWHTNy S1ig== X-Gm-Message-State: APjAAAVK+qqYVS8JJwsgqv1yLK9BAE/QhfKKR/hz58NkVAkuaqwKWXrm 4GnK+DkfQdMre7ApBMASwuo= X-Received: by 2002:a92:d3cd:: with SMTP id c13mr55145965ilh.21.1582561397851; Mon, 24 Feb 2020 08:23:17 -0800 (PST) Received: from gouda.nowheycreamery.com (c-68-32-74-190.hsd1.mi.comcast.net. [68.32.74.190]) by smtp.googlemail.com with ESMTPSA id f76sm4467413ild.82.2020.02.24.08.23.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Feb 2020 08:23:17 -0800 (PST) Message-ID: <3a2a3b9de724757b3b580536f2ea1947752faeb1.camel@gmail.com> Subject: Re: [PATCH v1 10/11] xprtrdma: Extract sockaddr from struct rdma_cm_id From: Anna Schumaker To: Chuck Lever Cc: linux-rdma@vger.kernel.org, Linux NFS Mailing List Date: Mon, 24 Feb 2020 11:23:16 -0500 In-Reply-To: <3099D78C-CBA7-43ED-86A1-4C757C7B9F93@oracle.com> References: <20200221214906.2072.32572.stgit@manet.1015granger.net> <20200221220100.2072.45609.stgit@manet.1015granger.net> <57e16538f7a711d7671056d19abc38a09afc451d.camel@gmail.com> <3099D78C-CBA7-43ED-86A1-4C757C7B9F93@oracle.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.34.4 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org On Mon, 2020-02-24 at 08:18 -0800, Chuck Lever wrote: > > On Feb 24, 2020, at 8:15 AM, Anna Schumaker > > wrote: > > > > Hi Chuck, > > > > On Fri, 2020-02-21 at 17:01 -0500, Chuck Lever wrote: > > > rpcrdma_cm_event_handler() is always passed an @id pointer that is > > > valid. However, in a subsequent patch, we won't be able to extract > > > an r_xprt in every case. So instead of using the r_xprt's > > > presentation address strings, extract them from struct rdma_cm_id. > > > > > > Signed-off-by: Chuck Lever > > > --- > > > include/trace/events/rpcrdma.h | 78 +++++++++++++++++++++++++++--------- > > > - > > > --- > > > net/sunrpc/xprtrdma/verbs.c | 33 +++++++---------- > > > 2 files changed, 67 insertions(+), 44 deletions(-) > > > > > > diff --git a/include/trace/events/rpcrdma.h > > > b/include/trace/events/rpcrdma.h > > > index bebc45f7c570..a6d3a2122e9b 100644 > > > --- a/include/trace/events/rpcrdma.h > > > +++ b/include/trace/events/rpcrdma.h > > > @@ -373,47 +373,74 @@ > > > > > > TRACE_EVENT(xprtrdma_inline_thresh, > > > TP_PROTO( > > > - const struct rpcrdma_xprt *r_xprt > > > + const struct rpcrdma_ep *ep > > > ), > > > > > > - TP_ARGS(r_xprt), > > > + TP_ARGS(ep), > > > > > > TP_STRUCT__entry( > > > - __field(const void *, r_xprt) > > > __field(unsigned int, inline_send) > > > __field(unsigned int, inline_recv) > > > __field(unsigned int, max_send) > > > __field(unsigned int, max_recv) > > > - __string(addr, rpcrdma_addrstr(r_xprt)) > > > - __string(port, rpcrdma_portstr(r_xprt)) > > > + __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) > > > + __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) > > > ), > > > > > > TP_fast_assign( > > > - const struct rpcrdma_ep *ep = &r_xprt->rx_ep; > > > + const struct rdma_cm_id *id = ep->re_id; > > > > > > - __entry->r_xprt = r_xprt; > > > __entry->inline_send = ep->re_inline_send; > > > __entry->inline_recv = ep->re_inline_recv; > > > __entry->max_send = ep->re_max_inline_send; > > > __entry->max_recv = ep->re_max_inline_recv; > > > - __assign_str(addr, rpcrdma_addrstr(r_xprt)); > > > - __assign_str(port, rpcrdma_portstr(r_xprt)); > > > + memcpy(__entry->srcaddr, &id->route.addr.src_addr, > > > + sizeof(struct sockaddr_in6)); > > > + memcpy(__entry->dstaddr, &id->route.addr.dst_addr, > > > + sizeof(struct sockaddr_in6)); > > > ), > > > > > > - TP_printk("peer=[%s]:%s r_xprt=%p neg send/recv=%u/%u, calc > > > send/recv=%u/%u", > > > - __get_str(addr), __get_str(port), __entry->r_xprt, > > > + TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", > > > + __entry->srcaddr, __entry->dstaddr, > > > __entry->inline_send, __entry->inline_recv, > > > __entry->max_send, __entry->max_recv > > > ) > > > ); > > > > > > +TRACE_EVENT(xprtrdma_remove, > > > + TP_PROTO( > > > + const struct rpcrdma_ep *ep > > > + ), > > > + > > > + TP_ARGS(ep), > > > + > > > + TP_STRUCT__entry( > > > + __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) > > > + __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) > > > + __string(name, ep->re_id->device->name) > > > + ), > > > + > > > + TP_fast_assign( > > > + const struct rdma_cm_id *id = ep->re_id; > > > + > > > + memcpy(__entry->srcaddr, &id->route.addr.src_addr, > > > + sizeof(struct sockaddr_in6)); > > > + memcpy(__entry->dstaddr, &id->route.addr.dst_addr, > > > + sizeof(struct sockaddr_in6)); > > > + __assign_str(name, id->device->name); > > > + ), > > > + > > > + TP_printk("%pISpc -> %pISpc device=%s", > > > + __entry->srcaddr, __entry->dstaddr, __get_str(name) > > > + ) > > > +); > > > + > > > DEFINE_CONN_EVENT(connect); > > > DEFINE_CONN_EVENT(disconnect); > > > DEFINE_CONN_EVENT(flush_dct); > > > > > > DEFINE_RXPRT_EVENT(xprtrdma_create); > > > DEFINE_RXPRT_EVENT(xprtrdma_op_destroy); > > > -DEFINE_RXPRT_EVENT(xprtrdma_remove); > > > DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); > > > DEFINE_RXPRT_EVENT(xprtrdma_op_close); > > > DEFINE_RXPRT_EVENT(xprtrdma_op_setport); > > > @@ -480,32 +507,33 @@ > > > > > > TRACE_EVENT(xprtrdma_qp_event, > > > TP_PROTO( > > > - const struct rpcrdma_xprt *r_xprt, > > > + const struct rpcrdma_ep *ep, > > > const struct ib_event *event > > > ), > > > > > > - TP_ARGS(r_xprt, event), > > > + TP_ARGS(ep, event), > > > > > > TP_STRUCT__entry( > > > - __field(const void *, r_xprt) > > > - __field(unsigned int, event) > > > + __field(unsigned long, event) > > > __string(name, event->device->name) > > > - __string(addr, rpcrdma_addrstr(r_xprt)) > > > - __string(port, rpcrdma_portstr(r_xprt)) > > > + __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) > > > + __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) > > > ), > > > > > > TP_fast_assign( > > > - __entry->r_xprt = r_xprt; > > > + const struct rdma_cm_id *id = ep->re_id; > > > + > > > __entry->event = event->event; > > > __assign_str(name, event->device->name); > > > - __assign_str(addr, rpcrdma_addrstr(r_xprt)); > > > - __assign_str(port, rpcrdma_portstr(r_xprt)); > > > + memcpy(__entry->srcaddr, &id->route.addr.src_addr, > > > + sizeof(struct sockaddr_in6)); > > > + memcpy(__entry->dstaddr, &id->route.addr.dst_addr, > > > + sizeof(struct sockaddr_in6)); > > > ), > > > > > > - TP_printk("peer=[%s]:%s r_xprt=%p: dev %s: %s (%u)", > > > - __get_str(addr), __get_str(port), __entry->r_xprt, > > > - __get_str(name), rdma_show_ib_event(__entry->event), > > > - __entry->event > > > + TP_printk("%pISpc -> %pISpc device=%s %s (%lu)", > > > + __entry->srcaddr, __entry->dstaddr, __get_str(name), > > > + rdma_show_ib_event(__entry->event), __entry->event > > > ) > > > ); > > > > > > diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c > > > index 10826982ddf8..5cb308fb4f0f 100644 > > > --- a/net/sunrpc/xprtrdma/verbs.c > > > +++ b/net/sunrpc/xprtrdma/verbs.c > > > @@ -116,16 +116,14 @@ static void rpcrdma_xprt_drain(struct rpcrdma_xprt > > > *r_xprt) > > > * @context: ep that owns QP where event occurred > > > * > > > * Called from the RDMA provider (device driver) possibly in an interrupt > > > - * context. > > > + * context. The QP is always destroyed before the ID, so the ID will be > > > + * reliably available when this handler is invoked. > > > */ > > > -static void > > > -rpcrdma_qp_event_handler(struct ib_event *event, void *context) > > > +static void rpcrdma_qp_event_handler(struct ib_event *event, void > > > *context) > > > { > > > struct rpcrdma_ep *ep = context; > > > - struct rpcrdma_xprt *r_xprt = container_of(ep, struct rpcrdma_xprt, > > > - rx_ep); > > > > > > - trace_xprtrdma_qp_event(r_xprt, event); > > > + trace_xprtrdma_qp_event(ep, event); > > > } > > > > > > /** > > > @@ -202,11 +200,10 @@ static void rpcrdma_wc_receive(struct ib_cq *cq, > > > struct > > > ib_wc *wc) > > > rpcrdma_rep_destroy(rep); > > > } > > > > > > -static void rpcrdma_update_cm_private(struct rpcrdma_xprt *r_xprt, > > > +static void rpcrdma_update_cm_private(struct rpcrdma_ep *ep, > > > struct rdma_conn_param *param) > > > { > > > const struct rpcrdma_connect_private *pmsg = param->private_data; > > > - struct rpcrdma_ep *ep = &r_xprt->rx_ep; > > > unsigned int rsize, wsize; > > > > > > /* Default settings for RPC-over-RDMA Version One */ > > > @@ -241,6 +238,7 @@ static void rpcrdma_update_cm_private(struct > > > rpcrdma_xprt > > > *r_xprt, > > > static int > > > rpcrdma_cm_event_handler(struct rdma_cm_id *id, struct rdma_cm_event > > > *event) > > > { > > > + struct sockaddr *sap = (struct sockaddr *)&id->route.addr.dst_addr; > > > > Is there an clean way to put this inside the CONFIG_SUNRPC_DEBUG lines > > below? > > I'm getting an "unused variable 'sap'" warning when CONFIG_SUNRPC_DEBUG=n. > > Looking at the RDMA_CM_EVENT_DEVICE_REMOVAL arm, seems like > those are not really debugging messages. What if I deleted > the "#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)" wrapper? That works for me! > > > > Thanks, > > Anna > > > > > struct rpcrdma_xprt *r_xprt = id->context; > > > struct rpcrdma_ep *ep = &r_xprt->rx_ep; > > > struct rpc_xprt *xprt = &r_xprt->rx_xprt; > > > @@ -264,23 +262,22 @@ static void rpcrdma_update_cm_private(struct > > > rpcrdma_xprt *r_xprt, > > > return 0; > > > case RDMA_CM_EVENT_DEVICE_REMOVAL: > > > #if IS_ENABLED(CONFIG_SUNRPC_DEBUG) > > > - pr_info("rpcrdma: removing device %s for %s:%s\n", > > > - ep->re_id->device->name, > > > - rpcrdma_addrstr(r_xprt), rpcrdma_portstr(r_xprt)); > > > + pr_info("rpcrdma: removing device %s for %pISpc\n", > > > + ep->re_id->device->name, sap); > > > #endif > > > init_completion(&ep->re_remove_done); > > > ep->re_connect_status = -ENODEV; > > > xprt_force_disconnect(xprt); > > > wait_for_completion(&ep->re_remove_done); > > > - trace_xprtrdma_remove(r_xprt); > > > + trace_xprtrdma_remove(ep); > > > > > > /* Return 1 to ensure the core destroys the id. */ > > > return 1; > > > case RDMA_CM_EVENT_ESTABLISHED: > > > ++xprt->connect_cookie; > > > ep->re_connect_status = 1; > > > - rpcrdma_update_cm_private(r_xprt, &event->param.conn); > > > - trace_xprtrdma_inline_thresh(r_xprt); > > > + rpcrdma_update_cm_private(ep, &event->param.conn); > > > + trace_xprtrdma_inline_thresh(ep); > > > wake_up_all(&ep->re_connect_wait); > > > break; > > > case RDMA_CM_EVENT_CONNECT_ERROR: > > > @@ -290,9 +287,8 @@ static void rpcrdma_update_cm_private(struct > > > rpcrdma_xprt > > > *r_xprt, > > > ep->re_connect_status = -ENETUNREACH; > > > goto disconnected; > > > case RDMA_CM_EVENT_REJECTED: > > > - dprintk("rpcrdma: connection to %s:%s rejected: %s\n", > > > - rpcrdma_addrstr(r_xprt), rpcrdma_portstr(r_xprt), > > > - rdma_reject_msg(id, event->status)); > > > + dprintk("rpcrdma: connection to %pISpc rejected: %s\n", > > > + sap, rdma_reject_msg(id, event->status)); > > > ep->re_connect_status = -ECONNREFUSED; > > > if (event->status == IB_CM_REJ_STALE_CONN) > > > ep->re_connect_status = -EAGAIN; > > > @@ -307,8 +303,7 @@ static void rpcrdma_update_cm_private(struct > > > rpcrdma_xprt > > > *r_xprt, > > > break; > > > } > > > > > > - dprintk("RPC: %s: %s:%s on %s/frwr: %s\n", __func__, > > > - rpcrdma_addrstr(r_xprt), rpcrdma_portstr(r_xprt), > > > + dprintk("RPC: %s: %pISpc on %s/frwr: %s\n", __func__, sap, > > > ep->re_id->device->name, rdma_event_msg(event->event)); > > > return 0; > > > } > > -- > Chuck Lever > > >