mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
svcrdma: Prevent page release when nothing was received
[ Upstream commitbaf6d18b11] I noticed that svc_rqst_release_pages() was still unnecessarily releasing a page when svc_rdma_recvfrom() returns zero. Fixes:a53d5cb064("svcrdma: Avoid releasing a page in svc_xprt_release()") Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
faf004e98d
commit
423453bb50
@@ -796,6 +796,12 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
|
|||||||
struct svc_rdma_recv_ctxt *ctxt;
|
struct svc_rdma_recv_ctxt *ctxt;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
/* Prevent svc_xprt_release() from releasing pages in rq_pages
|
||||||
|
* when returning 0 or an error.
|
||||||
|
*/
|
||||||
|
rqstp->rq_respages = rqstp->rq_pages;
|
||||||
|
rqstp->rq_next_page = rqstp->rq_respages;
|
||||||
|
|
||||||
rqstp->rq_xprt_ctxt = NULL;
|
rqstp->rq_xprt_ctxt = NULL;
|
||||||
|
|
||||||
ctxt = NULL;
|
ctxt = NULL;
|
||||||
@@ -819,12 +825,6 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
|
|||||||
DMA_FROM_DEVICE);
|
DMA_FROM_DEVICE);
|
||||||
svc_rdma_build_arg_xdr(rqstp, ctxt);
|
svc_rdma_build_arg_xdr(rqstp, ctxt);
|
||||||
|
|
||||||
/* Prevent svc_xprt_release from releasing pages in rq_pages
|
|
||||||
* if we return 0 or an error.
|
|
||||||
*/
|
|
||||||
rqstp->rq_respages = rqstp->rq_pages;
|
|
||||||
rqstp->rq_next_page = rqstp->rq_respages;
|
|
||||||
|
|
||||||
ret = svc_rdma_xdr_decode_req(&rqstp->rq_arg, ctxt);
|
ret = svc_rdma_xdr_decode_req(&rqstp->rq_arg, ctxt);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|||||||
Reference in New Issue
Block a user