aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/sunrpc/xprtrdma/transport.c3
-rw-r--r--net/sunrpc/xprtrdma/verbs.c18
2 files changed, 12 insertions, 9 deletions
diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
index 187894b4c33f..93fe7753ff94 100644
--- a/net/sunrpc/xprtrdma/transport.c
+++ b/net/sunrpc/xprtrdma/transport.c
@@ -463,7 +463,8 @@ xprt_rdma_allocate(struct rpc_task *task, size_t size)
463 struct rpcrdma_req *req, *nreq; 463 struct rpcrdma_req *req, *nreq;
464 464
465 req = rpcrdma_buffer_get(&rpcx_to_rdmax(xprt)->rx_buf); 465 req = rpcrdma_buffer_get(&rpcx_to_rdmax(xprt)->rx_buf);
466 BUG_ON(NULL == req); 466 if (req == NULL)
467 return NULL;
467 468
468 if (size > req->rl_size) { 469 if (size > req->rl_size) {
469 dprintk("RPC: %s: size %zd too large for buffer[%zd]: " 470 dprintk("RPC: %s: size %zd too large for buffer[%zd]: "
diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
index 515dfc14b731..13dbd1c389ff 100644
--- a/net/sunrpc/xprtrdma/verbs.c
+++ b/net/sunrpc/xprtrdma/verbs.c
@@ -1302,7 +1302,6 @@ rpcrdma_buffer_put(struct rpcrdma_req *req)
1302 int i; 1302 int i;
1303 unsigned long flags; 1303 unsigned long flags;
1304 1304
1305 BUG_ON(req->rl_nchunks != 0);
1306 spin_lock_irqsave(&buffers->rb_lock, flags); 1305 spin_lock_irqsave(&buffers->rb_lock, flags);
1307 buffers->rb_send_bufs[--buffers->rb_send_index] = req; 1306 buffers->rb_send_bufs[--buffers->rb_send_index] = req;
1308 req->rl_niovs = 0; 1307 req->rl_niovs = 0;
@@ -1535,10 +1534,6 @@ rpcrdma_register_frmr_external(struct rpcrdma_mr_seg *seg,
1535 } else 1534 } else
1536 post_wr = &frmr_wr; 1535 post_wr = &frmr_wr;
1537 1536
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
1542 /* Prepare FRMR WR */ 1537 /* Prepare FRMR WR */
1543 memset(&frmr_wr, 0, sizeof frmr_wr); 1538 memset(&frmr_wr, 0, sizeof frmr_wr);
1544 frmr_wr.wr_id = (unsigned long)(void *)seg1->mr_chunk.rl_mw; 1539 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,
1549 frmr_wr.wr.fast_reg.page_list_len = page_no; 1544 frmr_wr.wr.fast_reg.page_list_len = page_no;
1550 frmr_wr.wr.fast_reg.page_shift = PAGE_SHIFT; 1545 frmr_wr.wr.fast_reg.page_shift = PAGE_SHIFT;
1551 frmr_wr.wr.fast_reg.length = page_no << PAGE_SHIFT; 1546 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
1553 frmr_wr.wr.fast_reg.access_flags = (writing ? 1557 frmr_wr.wr.fast_reg.access_flags = (writing ?
1554 IB_ACCESS_REMOTE_WRITE | IB_ACCESS_LOCAL_WRITE : 1558 IB_ACCESS_REMOTE_WRITE | IB_ACCESS_LOCAL_WRITE :
1555 IB_ACCESS_REMOTE_READ); 1559 IB_ACCESS_REMOTE_READ);
@@ -1709,9 +1713,7 @@ rpcrdma_deregister_external(struct rpcrdma_mr_seg *seg,
1709 1713
1710#if RPCRDMA_PERSISTENT_REGISTRATION 1714#if RPCRDMA_PERSISTENT_REGISTRATION
1711 case RPCRDMA_ALLPHYSICAL: 1715 case RPCRDMA_ALLPHYSICAL:
1712 BUG_ON(nsegs != 1);
1713 rpcrdma_unmap_one(ia, seg); 1716 rpcrdma_unmap_one(ia, seg);
1714 rc = 0;
1715 break; 1717 break;
1716#endif 1718#endif
1717 1719