OSDN Git Service

svcrdma: Scrub BUG_ON() and WARN_ON() call sites
[uclinux-h8/linux.git] / net / sunrpc / xprtrdma / svc_rdma_transport.c
index 4ba11d0..f2e059b 100644 (file)
@@ -139,7 +139,6 @@ void svc_rdma_put_context(struct svc_rdma_op_ctxt *ctxt, int free_pages)
        struct svcxprt_rdma *xprt;
        int i;
 
-       BUG_ON(!ctxt);
        xprt = ctxt->xprt;
        if (free_pages)
                for (i = 0; i < ctxt->count; i++)
@@ -339,12 +338,14 @@ static void process_context(struct svcxprt_rdma *xprt,
 
        switch (ctxt->wr_op) {
        case IB_WR_SEND:
-               BUG_ON(ctxt->frmr);
+               if (ctxt->frmr)
+                       pr_err("svcrdma: SEND: ctxt->frmr != NULL\n");
                svc_rdma_put_context(ctxt, 1);
                break;
 
        case IB_WR_RDMA_WRITE:
-               BUG_ON(ctxt->frmr);
+               if (ctxt->frmr)
+                       pr_err("svcrdma: WRITE: ctxt->frmr != NULL\n");
                svc_rdma_put_context(ctxt, 0);
                break;
 
@@ -353,19 +354,21 @@ static void process_context(struct svcxprt_rdma *xprt,
                svc_rdma_put_frmr(xprt, ctxt->frmr);
                if (test_bit(RDMACTXT_F_LAST_CTXT, &ctxt->flags)) {
                        struct svc_rdma_op_ctxt *read_hdr = ctxt->read_hdr;
-                       BUG_ON(!read_hdr);
-                       spin_lock_bh(&xprt->sc_rq_dto_lock);
-                       set_bit(XPT_DATA, &xprt->sc_xprt.xpt_flags);
-                       list_add_tail(&read_hdr->dto_q,
-                                     &xprt->sc_read_complete_q);
-                       spin_unlock_bh(&xprt->sc_rq_dto_lock);
+                       if (read_hdr) {
+                               spin_lock_bh(&xprt->sc_rq_dto_lock);
+                               set_bit(XPT_DATA, &xprt->sc_xprt.xpt_flags);
+                               list_add_tail(&read_hdr->dto_q,
+                                             &xprt->sc_read_complete_q);
+                               spin_unlock_bh(&xprt->sc_rq_dto_lock);
+                       } else {
+                               pr_err("svcrdma: ctxt->read_hdr == NULL\n");
+                       }
                        svc_xprt_enqueue(&xprt->sc_xprt);
                }
                svc_rdma_put_context(ctxt, 0);
                break;
 
        default:
-               BUG_ON(1);
                printk(KERN_ERR "svcrdma: unexpected completion type, "
                       "opcode=%d\n",
                       ctxt->wr_op);
@@ -513,7 +516,10 @@ int svc_rdma_post_recv(struct svcxprt_rdma *xprt)
        buflen = 0;
        ctxt->direction = DMA_FROM_DEVICE;
        for (sge_no = 0; buflen < xprt->sc_max_req_size; sge_no++) {
-               BUG_ON(sge_no >= xprt->sc_max_sge);
+               if (sge_no >= xprt->sc_max_sge) {
+                       pr_err("svcrdma: Too many sges (%d)\n", sge_no);
+                       goto err_put_ctxt;
+               }
                page = svc_rdma_get_page();
                ctxt->pages[sge_no] = page;
                pa = ib_dma_map_page(xprt->sc_cm_id->device,
@@ -820,7 +826,7 @@ void svc_rdma_put_frmr(struct svcxprt_rdma *rdma,
        if (frmr) {
                frmr_unmap_dma(rdma, frmr);
                spin_lock_bh(&rdma->sc_frmr_q_lock);
-               BUG_ON(!list_empty(&frmr->frmr_list));
+               WARN_ON_ONCE(!list_empty(&frmr->frmr_list));
                list_add(&frmr->frmr_list, &rdma->sc_frmr_q);
                spin_unlock_bh(&rdma->sc_frmr_q_lock);
        }
@@ -1123,7 +1129,9 @@ static void __svc_rdma_free(struct work_struct *work)
        dprintk("svcrdma: svc_rdma_free(%p)\n", rdma);
 
        /* We should only be called from kref_put */
-       BUG_ON(atomic_read(&rdma->sc_xprt.xpt_ref.refcount) != 0);
+       if (atomic_read(&rdma->sc_xprt.xpt_ref.refcount) != 0)
+               pr_err("svcrdma: sc_xprt still in use? (%d)\n",
+                      atomic_read(&rdma->sc_xprt.xpt_ref.refcount));
 
        /*
         * Destroy queued, but not processed read completions. Note
@@ -1151,8 +1159,12 @@ static void __svc_rdma_free(struct work_struct *work)
        }
 
        /* Warn if we leaked a resource or under-referenced */
-       WARN_ON(atomic_read(&rdma->sc_ctxt_used) != 0);
-       WARN_ON(atomic_read(&rdma->sc_dma_used) != 0);
+       if (atomic_read(&rdma->sc_ctxt_used) != 0)
+               pr_err("svcrdma: ctxt still in use? (%d)\n",
+                      atomic_read(&rdma->sc_ctxt_used));
+       if (atomic_read(&rdma->sc_dma_used) != 0)
+               pr_err("svcrdma: dma still in use? (%d)\n",
+                      atomic_read(&rdma->sc_dma_used));
 
        /* De-allocate fastreg mr */
        rdma_dealloc_frmr_q(rdma);
@@ -1252,7 +1264,6 @@ int svc_rdma_send(struct svcxprt_rdma *xprt, struct ib_send_wr *wr)
        if (test_bit(XPT_CLOSE, &xprt->sc_xprt.xpt_flags))
                return -ENOTCONN;
 
-       BUG_ON(wr->send_flags != IB_SEND_SIGNALED);
        wr_count = 1;
        for (n_wr = wr->next; n_wr; n_wr = n_wr->next)
                wr_count++;