Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 97107
b: refs/heads/master
c: 0e7f011
h: refs/heads/master
i:
  97105: 6740309
  97103: ff56426
v: v3
  • Loading branch information
Tom Tucker committed May 19, 2008
1 parent c8b2eb4 commit c8e4540
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 36 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: aa3314c8d6da673b3454549eed45547a79f7cbe1
refs/heads/master: 0e7f011a19696cc25d68a8d6631fc6c5aa60a54c
17 changes: 1 addition & 16 deletions trunk/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
Original file line number Diff line number Diff line change
Expand Up @@ -457,8 +457,6 @@ static int rdma_read_complete(struct svc_rqst *rqstp,
ret, rqstp->rq_arg.len, rqstp->rq_arg.head[0].iov_base,
rqstp->rq_arg.head[0].iov_len);

/* Indicate that we've consumed an RQ credit */
rqstp->rq_xprt_ctxt = rqstp->rq_xprt;
svc_xprt_received(rqstp->rq_xprt);
return ret;
}
Expand All @@ -480,13 +478,6 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)

dprintk("svcrdma: rqstp=%p\n", rqstp);

/*
* The rq_xprt_ctxt indicates if we've consumed an RQ credit
* or not. It is used in the rdma xpo_release_rqst function to
* determine whether or not to return an RQ WQE to the RQ.
*/
rqstp->rq_xprt_ctxt = NULL;

spin_lock_bh(&rdma_xprt->sc_read_complete_lock);
if (!list_empty(&rdma_xprt->sc_read_complete_q)) {
ctxt = list_entry(rdma_xprt->sc_read_complete_q.next,
Expand Down Expand Up @@ -550,9 +541,6 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
return 0;
}

/* Indicate we've consumed an RQ credit */
rqstp->rq_xprt_ctxt = rqstp->rq_xprt;

ret = rqstp->rq_arg.head[0].iov_len
+ rqstp->rq_arg.page_len
+ rqstp->rq_arg.tail[0].iov_len;
Expand All @@ -569,11 +557,8 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
return ret;

close_out:
if (ctxt) {
if (ctxt)
svc_rdma_put_context(ctxt, 1);
/* Indicate we've consumed an RQ credit */
rqstp->rq_xprt_ctxt = rqstp->rq_xprt;
}
dprintk("svcrdma: transport %p is closing\n", xprt);
/*
* Set the close bit and enqueue it. svc_recv will see the
Expand Down
10 changes: 10 additions & 0 deletions trunk/net/sunrpc/xprtrdma/svc_rdma_sendto.c
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,16 @@ 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);
return 0;
}

/* Prepare the context */
ctxt->pages[0] = page;
ctxt->count = 1;
Expand Down
19 changes: 0 additions & 19 deletions trunk/net/sunrpc/xprtrdma/svc_rdma_transport.c
Original file line number Diff line number Diff line change
Expand Up @@ -910,27 +910,8 @@ static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt)
return NULL;
}

/*
* Post an RQ WQE to the RQ when the rqst is being released. This
* effectively returns an RQ credit to the client. The rq_xprt_ctxt
* will be null if the request is deferred due to an RDMA_READ or the
* transport had no data ready (EAGAIN). Note that an RPC deferred in
* svc_process will still return the credit, this is because the data
* is copied and no longer consume a WQE/WC.
*/
static void svc_rdma_release_rqst(struct svc_rqst *rqstp)
{
int err;
struct svcxprt_rdma *rdma =
container_of(rqstp->rq_xprt, struct svcxprt_rdma, sc_xprt);
if (rqstp->rq_xprt_ctxt) {
BUG_ON(rqstp->rq_xprt_ctxt != rdma);
err = svc_rdma_post_recv(rdma);
if (err)
dprintk("svcrdma: failed to post an RQ WQE error=%d\n",
err);
}
rqstp->rq_xprt_ctxt = NULL;
}

/*
Expand Down

0 comments on commit c8e4540

Please sign in to comment.