Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 97114
b: refs/heads/master
c: d16d400
h: refs/heads/master
v: v3
  • Loading branch information
Tom Tucker committed May 19, 2008
1 parent a567cc7 commit a736191
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 8 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: 58e8f62137f1c55fe3d31234167660f2ce509297
refs/heads/master: d16d40093a95f2b31007d7a7abefc50e6b27e236
23 changes: 16 additions & 7 deletions trunk/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
Original file line number Diff line number Diff line change
Expand Up @@ -260,11 +260,16 @@ static int rdma_read_max_sge(struct svcxprt_rdma *xprt, int sge_count)
* On our side, we need to read into a pagelist. The first page immediately
* follows the RPC header.
*
* This function returns 1 to indicate success. The data is not yet in
* This function returns:
* 0 - No error and no read-list found.
*
* 1 - Successful read-list processing. The data is not yet in
* the pagelist and therefore the RPC request must be deferred. The
* I/O completion will enqueue the transport again and
* svc_rdma_recvfrom will complete the request.
*
* <0 - Error processing/posting read-list.
*
* NOTE: The ctxt must not be touched after the last WR has been posted
* because the I/O completion processing may occur on another
* processor and free / modify the context. Ne touche pas!
Expand Down Expand Up @@ -398,7 +403,7 @@ static int rdma_read_xdr(struct svcxprt_rdma *xprt,
svc_rdma_put_context(head, 1);
head = ctxt;
}
return 0;
return err;
}

return 1;
Expand Down Expand Up @@ -532,14 +537,18 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
goto close_out;
}

/* Read read-list data. If we would need to wait, defer
* it. Not that in this case, we don't return the RQ credit
* until after the read completes.
*/
if (rdma_read_xdr(rdma_xprt, rmsgp, rqstp, ctxt)) {
/* Read read-list data. */
ret = rdma_read_xdr(rdma_xprt, rmsgp, rqstp, ctxt);
if (ret > 0) {
/* read-list posted, defer until data received from client. */
svc_xprt_received(xprt);
return 0;
}
if (ret < 0) {
/* Post of read-list failed, free context. */
svc_rdma_put_context(ctxt, 1);
return 0;
}

ret = rqstp->rq_arg.head[0].iov_len
+ rqstp->rq_arg.page_len
Expand Down

0 comments on commit a736191

Please sign in to comment.