Skip to content

Commit b4744e0

Browse files
chuckleveramschuma-ntap
authored andcommitted
xprtrdma: Add trace points for connect events
Signed-off-by: Chuck Lever <[email protected]> Signed-off-by: Anna Schumaker <[email protected]>
1 parent 1c443ef commit b4744e0

File tree

3 files changed

+92
-28
lines changed

3 files changed

+92
-28
lines changed

include/trace/events/rpcrdma.h

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,81 @@ DECLARE_EVENT_CLASS(xprtrdma_mr,
267267
), \
268268
TP_ARGS(mr))
269269

270+
/**
271+
** Connection events
272+
**/
273+
274+
TRACE_EVENT(xprtrdma_conn_upcall,
275+
TP_PROTO(
276+
const struct rpcrdma_xprt *r_xprt,
277+
struct rdma_cm_event *event
278+
),
279+
280+
TP_ARGS(r_xprt, event),
281+
282+
TP_STRUCT__entry(
283+
__field(const void *, r_xprt)
284+
__field(unsigned int, event)
285+
__field(int, status)
286+
__string(addr, rpcrdma_addrstr(r_xprt))
287+
__string(port, rpcrdma_portstr(r_xprt))
288+
),
289+
290+
TP_fast_assign(
291+
__entry->r_xprt = r_xprt;
292+
__entry->event = event->event;
293+
__entry->status = event->status;
294+
__assign_str(addr, rpcrdma_addrstr(r_xprt));
295+
__assign_str(port, rpcrdma_portstr(r_xprt));
296+
),
297+
298+
TP_printk("peer=[%s]:%s r_xprt=%p: %s (%u/%d)",
299+
__get_str(addr), __get_str(port),
300+
__entry->r_xprt, rdma_show_cm_event(__entry->event),
301+
__entry->event, __entry->status
302+
)
303+
);
304+
305+
TRACE_EVENT(xprtrdma_disconnect,
306+
TP_PROTO(
307+
const struct rpcrdma_xprt *r_xprt,
308+
int status
309+
),
310+
311+
TP_ARGS(r_xprt, status),
312+
313+
TP_STRUCT__entry(
314+
__field(const void *, r_xprt)
315+
__field(int, status)
316+
__field(int, connected)
317+
__string(addr, rpcrdma_addrstr(r_xprt))
318+
__string(port, rpcrdma_portstr(r_xprt))
319+
),
320+
321+
TP_fast_assign(
322+
__entry->r_xprt = r_xprt;
323+
__entry->status = status;
324+
__entry->connected = r_xprt->rx_ep.rep_connected;
325+
__assign_str(addr, rpcrdma_addrstr(r_xprt));
326+
__assign_str(port, rpcrdma_portstr(r_xprt));
327+
),
328+
329+
TP_printk("peer=[%s]:%s r_xprt=%p: status=%d %sconnected",
330+
__get_str(addr), __get_str(port),
331+
__entry->r_xprt, __entry->status,
332+
__entry->connected == 1 ? "still " : "dis"
333+
)
334+
);
335+
336+
DEFINE_RXPRT_EVENT(xprtrdma_conn_start);
337+
DEFINE_RXPRT_EVENT(xprtrdma_conn_tout);
338+
DEFINE_RXPRT_EVENT(xprtrdma_create);
339+
DEFINE_RXPRT_EVENT(xprtrdma_destroy);
340+
DEFINE_RXPRT_EVENT(xprtrdma_remove);
341+
DEFINE_RXPRT_EVENT(xprtrdma_reinsert);
342+
DEFINE_RXPRT_EVENT(xprtrdma_reconnect);
343+
DEFINE_RXPRT_EVENT(xprtrdma_inject_dsc);
344+
270345
/**
271346
** Call events
272347
**/

net/sunrpc/xprtrdma/transport.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -259,13 +259,10 @@ xprt_rdma_connect_worker(struct work_struct *work)
259259

260260
xprt_clear_connected(xprt);
261261

262-
dprintk("RPC: %s: %sconnect\n", __func__,
263-
r_xprt->rx_ep.rep_connected != 0 ? "re" : "");
264262
rc = rpcrdma_ep_connect(&r_xprt->rx_ep, &r_xprt->rx_ia);
265263
if (rc)
266264
xprt_wake_pending_tasks(xprt, rc);
267265

268-
dprintk("RPC: %s: exit\n", __func__);
269266
xprt_clear_connecting(xprt);
270267
}
271268

@@ -275,7 +272,7 @@ xprt_rdma_inject_disconnect(struct rpc_xprt *xprt)
275272
struct rpcrdma_xprt *r_xprt = container_of(xprt, struct rpcrdma_xprt,
276273
rx_xprt);
277274

278-
pr_info("rpcrdma: injecting transport disconnect on xprt=%p\n", xprt);
275+
trace_xprtrdma_inject_dsc(r_xprt);
279276
rdma_disconnect(r_xprt->rx_ia.ri_id);
280277
}
281278

@@ -295,7 +292,7 @@ xprt_rdma_destroy(struct rpc_xprt *xprt)
295292
{
296293
struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt);
297294

298-
dprintk("RPC: %s: called\n", __func__);
295+
trace_xprtrdma_destroy(r_xprt);
299296

300297
cancel_delayed_work_sync(&r_xprt->rx_connect_worker);
301298

@@ -306,11 +303,8 @@ xprt_rdma_destroy(struct rpc_xprt *xprt)
306303
rpcrdma_ia_close(&r_xprt->rx_ia);
307304

308305
xprt_rdma_free_addresses(xprt);
309-
310306
xprt_free(xprt);
311307

312-
dprintk("RPC: %s: returning\n", __func__);
313-
314308
module_put(THIS_MODULE);
315309
}
316310

@@ -430,6 +424,7 @@ xprt_setup_rdma(struct xprt_create *args)
430424
dprintk("RPC: %s: %s:%s\n", __func__,
431425
xprt->address_strings[RPC_DISPLAY_ADDR],
432426
xprt->address_strings[RPC_DISPLAY_PORT]);
427+
trace_xprtrdma_create(new_xprt);
433428
return xprt;
434429

435430
out4:
@@ -440,6 +435,7 @@ xprt_setup_rdma(struct xprt_create *args)
440435
out2:
441436
rpcrdma_ia_close(&new_xprt->rx_ia);
442437
out1:
438+
trace_xprtrdma_destroy(new_xprt);
443439
xprt_rdma_free_addresses(xprt);
444440
xprt_free(xprt);
445441
return ERR_PTR(rc);

net/sunrpc/xprtrdma/verbs.c

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ rpcrdma_conn_upcall(struct rdma_cm_id *id, struct rdma_cm_event *event)
220220
struct rpcrdma_ep *ep = &xprt->rx_ep;
221221
int connstate = 0;
222222

223+
trace_xprtrdma_conn_upcall(xprt, event);
223224
switch (event->event) {
224225
case RDMA_CM_EVENT_ADDR_RESOLVED:
225226
case RDMA_CM_EVENT_ROUTE_RESOLVED:
@@ -228,14 +229,10 @@ rpcrdma_conn_upcall(struct rdma_cm_id *id, struct rdma_cm_event *event)
228229
break;
229230
case RDMA_CM_EVENT_ADDR_ERROR:
230231
ia->ri_async_rc = -EHOSTUNREACH;
231-
dprintk("RPC: %s: CM address resolution error, ep 0x%p\n",
232-
__func__, ep);
233232
complete(&ia->ri_done);
234233
break;
235234
case RDMA_CM_EVENT_ROUTE_ERROR:
236235
ia->ri_async_rc = -ENETUNREACH;
237-
dprintk("RPC: %s: CM route resolution error, ep 0x%p\n",
238-
__func__, ep);
239236
complete(&ia->ri_done);
240237
break;
241238
case RDMA_CM_EVENT_DEVICE_REMOVAL:
@@ -299,6 +296,8 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt, struct rpcrdma_ia *ia)
299296
struct rdma_cm_id *id;
300297
int rc;
301298

299+
trace_xprtrdma_conn_start(xprt);
300+
302301
init_completion(&ia->ri_done);
303302
init_completion(&ia->ri_remove_done);
304303

@@ -322,8 +321,7 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt, struct rpcrdma_ia *ia)
322321
}
323322
rc = wait_for_completion_interruptible_timeout(&ia->ri_done, wtimeout);
324323
if (rc < 0) {
325-
dprintk("RPC: %s: wait() exited: %i\n",
326-
__func__, rc);
324+
trace_xprtrdma_conn_tout(xprt);
327325
goto out;
328326
}
329327

@@ -340,8 +338,7 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt, struct rpcrdma_ia *ia)
340338
}
341339
rc = wait_for_completion_interruptible_timeout(&ia->ri_done, wtimeout);
342340
if (rc < 0) {
343-
dprintk("RPC: %s: wait() exited: %i\n",
344-
__func__, rc);
341+
trace_xprtrdma_conn_tout(xprt);
345342
goto out;
346343
}
347344
rc = ia->ri_async_rc;
@@ -461,6 +458,8 @@ rpcrdma_ia_remove(struct rpcrdma_ia *ia)
461458

462459
/* Allow waiters to continue */
463460
complete(&ia->ri_remove_done);
461+
462+
trace_xprtrdma_remove(r_xprt);
464463
}
465464

466465
/**
@@ -471,7 +470,6 @@ rpcrdma_ia_remove(struct rpcrdma_ia *ia)
471470
void
472471
rpcrdma_ia_close(struct rpcrdma_ia *ia)
473472
{
474-
dprintk("RPC: %s: entering\n", __func__);
475473
if (ia->ri_id != NULL && !IS_ERR(ia->ri_id)) {
476474
if (ia->ri_id->qp)
477475
rdma_destroy_qp(ia->ri_id);
@@ -625,9 +623,6 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
625623
void
626624
rpcrdma_ep_destroy(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia)
627625
{
628-
dprintk("RPC: %s: entering, connected is %d\n",
629-
__func__, ep->rep_connected);
630-
631626
cancel_delayed_work_sync(&ep->rep_connect_worker);
632627

633628
if (ia->ri_id->qp) {
@@ -650,7 +645,7 @@ rpcrdma_ep_recreate_xprt(struct rpcrdma_xprt *r_xprt,
650645
{
651646
int rc, err;
652647

653-
pr_info("%s: r_xprt = %p\n", __func__, r_xprt);
648+
trace_xprtrdma_reinsert(r_xprt);
654649

655650
rc = -EHOSTUNREACH;
656651
if (rpcrdma_ia_open(r_xprt))
@@ -688,7 +683,7 @@ rpcrdma_ep_reconnect(struct rpcrdma_xprt *r_xprt, struct rpcrdma_ep *ep,
688683
struct rdma_cm_id *id, *old;
689684
int err, rc;
690685

691-
dprintk("RPC: %s: reconnecting...\n", __func__);
686+
trace_xprtrdma_reconnect(r_xprt);
692687

693688
rpcrdma_ep_disconnect(ep, ia);
694689

@@ -810,16 +805,14 @@ rpcrdma_ep_disconnect(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia)
810805
int rc;
811806

812807
rc = rdma_disconnect(ia->ri_id);
813-
if (!rc) {
808+
if (!rc)
814809
/* returns without wait if not connected */
815810
wait_event_interruptible(ep->rep_connect_wait,
816811
ep->rep_connected != 1);
817-
dprintk("RPC: %s: after wait, %sconnected\n", __func__,
818-
(ep->rep_connected == 1) ? "still " : "dis");
819-
} else {
820-
dprintk("RPC: %s: rdma_disconnect %i\n", __func__, rc);
812+
else
821813
ep->rep_connected = rc;
822-
}
814+
trace_xprtrdma_disconnect(container_of(ep, struct rpcrdma_xprt,
815+
rx_ep), rc);
823816

824817
ib_drain_qp(ia->ri_id->qp);
825818
}

0 commit comments

Comments
 (0)