Skip to content

Commit c977dea

Browse files
chuckleveramschuma-ntap
authored andcommitted
xprtrdma: Remove BUG_ON() call sites
If an error occurs in the marshaling logic, fail the RPC request being processed, but leave the client running. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
1 parent e7ce710 commit c977dea

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

net/sunrpc/xprtrdma/transport.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,8 @@ xprt_rdma_allocate(struct rpc_task *task, size_t size)
463463
struct rpcrdma_req *req, *nreq;
464464

465465
req = rpcrdma_buffer_get(&rpcx_to_rdmax(xprt)->rx_buf);
466-
BUG_ON(NULL == req);
466+
if (req == NULL)
467+
return NULL;
467468

468469
if (size > req->rl_size) {
469470
dprintk("RPC: %s: size %zd too large for buffer[%zd]: "

net/sunrpc/xprtrdma/verbs.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1302,7 +1302,6 @@ rpcrdma_buffer_put(struct rpcrdma_req *req)
13021302
int i;
13031303
unsigned long flags;
13041304

1305-
BUG_ON(req->rl_nchunks != 0);
13061305
spin_lock_irqsave(&buffers->rb_lock, flags);
13071306
buffers->rb_send_bufs[--buffers->rb_send_index] = req;
13081307
req->rl_niovs = 0;
@@ -1535,10 +1534,6 @@ rpcrdma_register_frmr_external(struct rpcrdma_mr_seg *seg,
15351534
} else
15361535
post_wr = &frmr_wr;
15371536

1538-
/* Bump the key */
1539-
key = (u8)(seg1->mr_chunk.rl_mw->r.frmr.fr_mr->rkey & 0x000000FF);
1540-
ib_update_fast_reg_key(seg1->mr_chunk.rl_mw->r.frmr.fr_mr, ++key);
1541-
15421537
/* Prepare FRMR WR */
15431538
memset(&frmr_wr, 0, sizeof frmr_wr);
15441539
frmr_wr.wr_id = (unsigned long)(void *)seg1->mr_chunk.rl_mw;
@@ -1549,7 +1544,16 @@ rpcrdma_register_frmr_external(struct rpcrdma_mr_seg *seg,
15491544
frmr_wr.wr.fast_reg.page_list_len = page_no;
15501545
frmr_wr.wr.fast_reg.page_shift = PAGE_SHIFT;
15511546
frmr_wr.wr.fast_reg.length = page_no << PAGE_SHIFT;
1552-
BUG_ON(frmr_wr.wr.fast_reg.length < len);
1547+
if (frmr_wr.wr.fast_reg.length < len) {
1548+
while (seg1->mr_nsegs--)
1549+
rpcrdma_unmap_one(ia, seg++);
1550+
return -EIO;
1551+
}
1552+
1553+
/* Bump the key */
1554+
key = (u8)(seg1->mr_chunk.rl_mw->r.frmr.fr_mr->rkey & 0x000000FF);
1555+
ib_update_fast_reg_key(seg1->mr_chunk.rl_mw->r.frmr.fr_mr, ++key);
1556+
15531557
frmr_wr.wr.fast_reg.access_flags = (writing ?
15541558
IB_ACCESS_REMOTE_WRITE | IB_ACCESS_LOCAL_WRITE :
15551559
IB_ACCESS_REMOTE_READ);
@@ -1709,9 +1713,7 @@ rpcrdma_deregister_external(struct rpcrdma_mr_seg *seg,
17091713

17101714
#if RPCRDMA_PERSISTENT_REGISTRATION
17111715
case RPCRDMA_ALLPHYSICAL:
1712-
BUG_ON(nsegs != 1);
17131716
rpcrdma_unmap_one(ia, seg);
1714-
rc = 0;
17151717
break;
17161718
#endif
17171719

0 commit comments

Comments
 (0)