Skip to content

Commit f764a1e

Browse files
author
Trond Myklebust
committed
Merge tag 'nfs-rdma-for-5.7-1' of git://git.linux-nfs.org/projects/anna/linux-nfs
NFSoRDMA Client Updates for Linux 5.7 New Features: - Allow one active connection and several zombie connections to prevent blocking if the remote server is unresponsive. Bugfixes and Cleanups: - Enhance MR-related trace points - Refactor connection set-up and disconnect functions - Make Protection Domains per-connection instead of per-transport - Merge struct rpcrdma_ia into rpcrdma_ep
2 parents 1de3af9 + e28ce90 commit f764a1e

File tree

7 files changed

+476
-715
lines changed

7 files changed

+476
-715
lines changed

include/trace/events/rpcrdma.h

Lines changed: 63 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,12 @@ DECLARE_EVENT_CLASS(xprtrdma_connect_class,
104104
TP_fast_assign(
105105
__entry->r_xprt = r_xprt;
106106
__entry->rc = rc;
107-
__entry->connect_status = r_xprt->rx_ep.rep_connected;
107+
__entry->connect_status = r_xprt->rx_ep->re_connect_status;
108108
__assign_str(addr, rpcrdma_addrstr(r_xprt));
109109
__assign_str(port, rpcrdma_portstr(r_xprt));
110110
),
111111

112-
TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connect status=%d",
112+
TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d",
113113
__get_str(addr), __get_str(port), __entry->r_xprt,
114114
__entry->rc, __entry->connect_status
115115
)
@@ -228,20 +228,20 @@ DECLARE_EVENT_CLASS(xprtrdma_frwr_done,
228228
TP_ARGS(wc, frwr),
229229

230230
TP_STRUCT__entry(
231-
__field(const void *, mr)
231+
__field(u32, mr_id)
232232
__field(unsigned int, status)
233233
__field(unsigned int, vendor_err)
234234
),
235235

236236
TP_fast_assign(
237-
__entry->mr = container_of(frwr, struct rpcrdma_mr, frwr);
237+
__entry->mr_id = frwr->fr_mr->res.id;
238238
__entry->status = wc->status;
239239
__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
240240
),
241241

242242
TP_printk(
243-
"mr=%p: %s (%u/0x%x)",
244-
__entry->mr, rdma_show_wc_status(__entry->status),
243+
"mr.id=%u: %s (%u/0x%x)",
244+
__entry->mr_id, rdma_show_wc_status(__entry->status),
245245
__entry->status, __entry->vendor_err
246246
)
247247
);
@@ -274,23 +274,25 @@ DECLARE_EVENT_CLASS(xprtrdma_mr,
274274
TP_ARGS(mr),
275275

276276
TP_STRUCT__entry(
277-
__field(const void *, mr)
277+
__field(u32, mr_id)
278+
__field(int, nents)
278279
__field(u32, handle)
279280
__field(u32, length)
280281
__field(u64, offset)
281282
__field(u32, dir)
282283
),
283284

284285
TP_fast_assign(
285-
__entry->mr = mr;
286+
__entry->mr_id = mr->frwr.fr_mr->res.id;
287+
__entry->nents = mr->mr_nents;
286288
__entry->handle = mr->mr_handle;
287289
__entry->length = mr->mr_length;
288290
__entry->offset = mr->mr_offset;
289291
__entry->dir = mr->mr_dir;
290292
),
291293

292-
TP_printk("mr=%p %u@0x%016llx:0x%08x (%s)",
293-
__entry->mr, __entry->length,
294+
TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
295+
__entry->mr_id, __entry->nents, __entry->length,
294296
(unsigned long long)__entry->offset, __entry->handle,
295297
xprtrdma_show_direction(__entry->dir)
296298
)
@@ -340,80 +342,48 @@ DECLARE_EVENT_CLASS(xprtrdma_cb_event,
340342
** Connection events
341343
**/
342344

343-
TRACE_EVENT(xprtrdma_cm_event,
344-
TP_PROTO(
345-
const struct rpcrdma_xprt *r_xprt,
346-
struct rdma_cm_event *event
347-
),
348-
349-
TP_ARGS(r_xprt, event),
350-
351-
TP_STRUCT__entry(
352-
__field(const void *, r_xprt)
353-
__field(unsigned int, event)
354-
__field(int, status)
355-
__string(addr, rpcrdma_addrstr(r_xprt))
356-
__string(port, rpcrdma_portstr(r_xprt))
357-
),
358-
359-
TP_fast_assign(
360-
__entry->r_xprt = r_xprt;
361-
__entry->event = event->event;
362-
__entry->status = event->status;
363-
__assign_str(addr, rpcrdma_addrstr(r_xprt));
364-
__assign_str(port, rpcrdma_portstr(r_xprt));
365-
),
366-
367-
TP_printk("peer=[%s]:%s r_xprt=%p: %s (%u/%d)",
368-
__get_str(addr), __get_str(port),
369-
__entry->r_xprt, rdma_show_cm_event(__entry->event),
370-
__entry->event, __entry->status
371-
)
372-
);
373-
374345
TRACE_EVENT(xprtrdma_inline_thresh,
375346
TP_PROTO(
376-
const struct rpcrdma_xprt *r_xprt
347+
const struct rpcrdma_ep *ep
377348
),
378349

379-
TP_ARGS(r_xprt),
350+
TP_ARGS(ep),
380351

381352
TP_STRUCT__entry(
382-
__field(const void *, r_xprt)
383353
__field(unsigned int, inline_send)
384354
__field(unsigned int, inline_recv)
385355
__field(unsigned int, max_send)
386356
__field(unsigned int, max_recv)
387-
__string(addr, rpcrdma_addrstr(r_xprt))
388-
__string(port, rpcrdma_portstr(r_xprt))
357+
__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
358+
__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
389359
),
390360

391361
TP_fast_assign(
392-
const struct rpcrdma_ep *ep = &r_xprt->rx_ep;
362+
const struct rdma_cm_id *id = ep->re_id;
393363

394-
__entry->r_xprt = r_xprt;
395-
__entry->inline_send = ep->rep_inline_send;
396-
__entry->inline_recv = ep->rep_inline_recv;
397-
__entry->max_send = ep->rep_max_inline_send;
398-
__entry->max_recv = ep->rep_max_inline_recv;
399-
__assign_str(addr, rpcrdma_addrstr(r_xprt));
400-
__assign_str(port, rpcrdma_portstr(r_xprt));
364+
__entry->inline_send = ep->re_inline_send;
365+
__entry->inline_recv = ep->re_inline_recv;
366+
__entry->max_send = ep->re_max_inline_send;
367+
__entry->max_recv = ep->re_max_inline_recv;
368+
memcpy(__entry->srcaddr, &id->route.addr.src_addr,
369+
sizeof(struct sockaddr_in6));
370+
memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
371+
sizeof(struct sockaddr_in6));
401372
),
402373

403-
TP_printk("peer=[%s]:%s r_xprt=%p neg send/recv=%u/%u, calc send/recv=%u/%u",
404-
__get_str(addr), __get_str(port), __entry->r_xprt,
374+
TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u",
375+
__entry->srcaddr, __entry->dstaddr,
405376
__entry->inline_send, __entry->inline_recv,
406377
__entry->max_send, __entry->max_recv
407378
)
408379
);
409380

410381
DEFINE_CONN_EVENT(connect);
411382
DEFINE_CONN_EVENT(disconnect);
383+
DEFINE_CONN_EVENT(flush_dct);
412384

413385
DEFINE_RXPRT_EVENT(xprtrdma_create);
414386
DEFINE_RXPRT_EVENT(xprtrdma_op_destroy);
415-
DEFINE_RXPRT_EVENT(xprtrdma_remove);
416-
DEFINE_RXPRT_EVENT(xprtrdma_reinsert);
417387
DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
418388
DEFINE_RXPRT_EVENT(xprtrdma_op_close);
419389
DEFINE_RXPRT_EVENT(xprtrdma_op_setport);
@@ -480,32 +450,33 @@ TRACE_EVENT(xprtrdma_op_set_cto,
480450

481451
TRACE_EVENT(xprtrdma_qp_event,
482452
TP_PROTO(
483-
const struct rpcrdma_xprt *r_xprt,
453+
const struct rpcrdma_ep *ep,
484454
const struct ib_event *event
485455
),
486456

487-
TP_ARGS(r_xprt, event),
457+
TP_ARGS(ep, event),
488458

489459
TP_STRUCT__entry(
490-
__field(const void *, r_xprt)
491-
__field(unsigned int, event)
460+
__field(unsigned long, event)
492461
__string(name, event->device->name)
493-
__string(addr, rpcrdma_addrstr(r_xprt))
494-
__string(port, rpcrdma_portstr(r_xprt))
462+
__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
463+
__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
495464
),
496465

497466
TP_fast_assign(
498-
__entry->r_xprt = r_xprt;
467+
const struct rdma_cm_id *id = ep->re_id;
468+
499469
__entry->event = event->event;
500470
__assign_str(name, event->device->name);
501-
__assign_str(addr, rpcrdma_addrstr(r_xprt));
502-
__assign_str(port, rpcrdma_portstr(r_xprt));
471+
memcpy(__entry->srcaddr, &id->route.addr.src_addr,
472+
sizeof(struct sockaddr_in6));
473+
memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
474+
sizeof(struct sockaddr_in6));
503475
),
504476

505-
TP_printk("peer=[%s]:%s r_xprt=%p: dev %s: %s (%u)",
506-
__get_str(addr), __get_str(port), __entry->r_xprt,
507-
__get_str(name), rdma_show_ib_event(__entry->event),
508-
__entry->event
477+
TP_printk("%pISpc -> %pISpc device=%s %s (%lu)",
478+
__entry->srcaddr, __entry->dstaddr, __get_str(name),
479+
rdma_show_ib_event(__entry->event), __entry->event
509480
)
510481
);
511482

@@ -801,7 +772,7 @@ TRACE_EVENT(xprtrdma_post_recvs,
801772
__entry->r_xprt = r_xprt;
802773
__entry->count = count;
803774
__entry->status = status;
804-
__entry->posted = r_xprt->rx_ep.rep_receive_count;
775+
__entry->posted = r_xprt->rx_ep->re_receive_count;
805776
__assign_str(addr, rpcrdma_addrstr(r_xprt));
806777
__assign_str(port, rpcrdma_portstr(r_xprt));
807778
),
@@ -920,17 +891,17 @@ TRACE_EVENT(xprtrdma_frwr_alloc,
920891
TP_ARGS(mr, rc),
921892

922893
TP_STRUCT__entry(
923-
__field(const void *, mr)
894+
__field(u32, mr_id)
924895
__field(int, rc)
925896
),
926897

927898
TP_fast_assign(
928-
__entry->mr = mr;
929-
__entry->rc = rc;
899+
__entry->mr_id = mr->frwr.fr_mr->res.id;
900+
__entry->rc = rc;
930901
),
931902

932-
TP_printk("mr=%p: rc=%d",
933-
__entry->mr, __entry->rc
903+
TP_printk("mr.id=%u: rc=%d",
904+
__entry->mr_id, __entry->rc
934905
)
935906
);
936907

@@ -943,7 +914,8 @@ TRACE_EVENT(xprtrdma_frwr_dereg,
943914
TP_ARGS(mr, rc),
944915

945916
TP_STRUCT__entry(
946-
__field(const void *, mr)
917+
__field(u32, mr_id)
918+
__field(int, nents)
947919
__field(u32, handle)
948920
__field(u32, length)
949921
__field(u64, offset)
@@ -952,16 +924,17 @@ TRACE_EVENT(xprtrdma_frwr_dereg,
952924
),
953925

954926
TP_fast_assign(
955-
__entry->mr = mr;
927+
__entry->mr_id = mr->frwr.fr_mr->res.id;
928+
__entry->nents = mr->mr_nents;
956929
__entry->handle = mr->mr_handle;
957930
__entry->length = mr->mr_length;
958931
__entry->offset = mr->mr_offset;
959932
__entry->dir = mr->mr_dir;
960933
__entry->rc = rc;
961934
),
962935

963-
TP_printk("mr=%p %u@0x%016llx:0x%08x (%s): rc=%d",
964-
__entry->mr, __entry->length,
936+
TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d",
937+
__entry->mr_id, __entry->nents, __entry->length,
965938
(unsigned long long)__entry->offset, __entry->handle,
966939
xprtrdma_show_direction(__entry->dir),
967940
__entry->rc
@@ -977,21 +950,21 @@ TRACE_EVENT(xprtrdma_frwr_sgerr,
977950
TP_ARGS(mr, sg_nents),
978951

979952
TP_STRUCT__entry(
980-
__field(const void *, mr)
953+
__field(u32, mr_id)
981954
__field(u64, addr)
982955
__field(u32, dir)
983956
__field(int, nents)
984957
),
985958

986959
TP_fast_assign(
987-
__entry->mr = mr;
960+
__entry->mr_id = mr->frwr.fr_mr->res.id;
988961
__entry->addr = mr->mr_sg->dma_address;
989962
__entry->dir = mr->mr_dir;
990963
__entry->nents = sg_nents;
991964
),
992965

993-
TP_printk("mr=%p dma addr=0x%llx (%s) sg_nents=%d",
994-
__entry->mr, __entry->addr,
966+
TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d",
967+
__entry->mr_id, __entry->addr,
995968
xprtrdma_show_direction(__entry->dir),
996969
__entry->nents
997970
)
@@ -1006,23 +979,23 @@ TRACE_EVENT(xprtrdma_frwr_maperr,
1006979
TP_ARGS(mr, num_mapped),
1007980

1008981
TP_STRUCT__entry(
1009-
__field(const void *, mr)
982+
__field(u32, mr_id)
1010983
__field(u64, addr)
1011984
__field(u32, dir)
1012985
__field(int, num_mapped)
1013986
__field(int, nents)
1014987
),
1015988

1016989
TP_fast_assign(
1017-
__entry->mr = mr;
990+
__entry->mr_id = mr->frwr.fr_mr->res.id;
1018991
__entry->addr = mr->mr_sg->dma_address;
1019992
__entry->dir = mr->mr_dir;
1020993
__entry->num_mapped = num_mapped;
1021994
__entry->nents = mr->mr_nents;
1022995
),
1023996

1024-
TP_printk("mr=%p dma addr=0x%llx (%s) nents=%d of %d",
1025-
__entry->mr, __entry->addr,
997+
TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d",
998+
__entry->mr_id, __entry->addr,
1026999
xprtrdma_show_direction(__entry->dir),
10271000
__entry->num_mapped, __entry->nents
10281001
)
@@ -1031,7 +1004,7 @@ TRACE_EVENT(xprtrdma_frwr_maperr,
10311004
DEFINE_MR_EVENT(localinv);
10321005
DEFINE_MR_EVENT(map);
10331006
DEFINE_MR_EVENT(unmap);
1034-
DEFINE_MR_EVENT(remoteinv);
1007+
DEFINE_MR_EVENT(reminv);
10351008
DEFINE_MR_EVENT(recycle);
10361009

10371010
TRACE_EVENT(xprtrdma_dma_maperr,

net/sunrpc/xprtrdma/backchannel.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ int xprt_rdma_bc_setup(struct rpc_xprt *xprt, unsigned int reqs)
4444
size_t xprt_rdma_bc_maxpayload(struct rpc_xprt *xprt)
4545
{
4646
struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt);
47-
struct rpcrdma_ep *ep = &r_xprt->rx_ep;
47+
struct rpcrdma_ep *ep = r_xprt->rx_ep;
4848
size_t maxmsg;
4949

50-
maxmsg = min_t(unsigned int, ep->rep_inline_send, ep->rep_inline_recv);
50+
maxmsg = min_t(unsigned int, ep->re_inline_send, ep->re_inline_recv);
5151
maxmsg = min_t(unsigned int, maxmsg, PAGE_SIZE);
5252
return maxmsg - RPCRDMA_HDRLEN_MIN;
5353
}
@@ -115,7 +115,7 @@ int xprt_rdma_bc_send_reply(struct rpc_rqst *rqst)
115115
if (rc < 0)
116116
goto failed_marshal;
117117

118-
if (rpcrdma_ep_post(&r_xprt->rx_ia, &r_xprt->rx_ep, req))
118+
if (rpcrdma_post_sends(r_xprt, req))
119119
goto drop_connection;
120120
return 0;
121121

@@ -190,7 +190,7 @@ static struct rpc_rqst *rpcrdma_bc_rqst_get(struct rpcrdma_xprt *r_xprt)
190190
if (xprt->bc_alloc_count >= RPCRDMA_BACKWARD_WRS)
191191
return NULL;
192192

193-
size = min_t(size_t, r_xprt->rx_ep.rep_inline_recv, PAGE_SIZE);
193+
size = min_t(size_t, r_xprt->rx_ep->re_inline_recv, PAGE_SIZE);
194194
req = rpcrdma_req_create(r_xprt, size, GFP_KERNEL);
195195
if (!req)
196196
return NULL;

0 commit comments

Comments
 (0)