]> err.no Git - linux-2.6/blobdiff - net/sunrpc/xprtrdma/svc_rdma_sendto.c
Merge branch 'eseries' into pxa
[linux-2.6] / net / sunrpc / xprtrdma / svc_rdma_sendto.c
index 3e321949e1dc55cbd89db97a857e6fe70512f6c3..fb82b1b683f898ef3e305fd232202e693e396651 100644 (file)
@@ -156,10 +156,11 @@ static int send_write(struct svcxprt_rdma *xprt, struct svc_rqst *rqstp,
        struct svc_rdma_op_ctxt *ctxt;
        int ret = 0;
 
-       BUG_ON(sge_count >= 32);
+       BUG_ON(sge_count > RPCSVC_MAXPAGES);
        dprintk("svcrdma: RDMA_WRITE rmr=%x, to=%llx, xdr_off=%d, "
                "write_len=%d, xdr_sge=%p, sge_count=%d\n",
-               rmr, to, xdr_off, write_len, xdr_sge, sge_count);
+               rmr, (unsigned long long)to, xdr_off,
+               write_len, xdr_sge, sge_count);
 
        ctxt = svc_rdma_get_context(xprt);
        ctxt->count = 0;
@@ -388,6 +389,17 @@ static int send_reply(struct svcxprt_rdma *rdma,
        int page_no;
        int ret;
 
+       /* Post a recv buffer to handle another request. */
+       ret = svc_rdma_post_recv(rdma);
+       if (ret) {
+               printk(KERN_INFO
+                      "svcrdma: could not post a receive buffer, err=%d."
+                      "Closing transport %p.\n", ret, rdma);
+               set_bit(XPT_CLOSE, &rdma->sc_xprt.xpt_flags);
+               svc_rdma_put_context(ctxt, 0);
+               return -ENOTCONN;
+       }
+
        /* Prepare the context */
        ctxt->pages[0] = page;
        ctxt->count = 1;