mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-15 05:11:32 +00:00
svcrdma: clean up error paths.
These fixes resolved crashes due to resource leak BUG_ON checks. The resource leaks were detected by introducing asynchronous transport errors. Signed-off-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Tom Tucker <tom@opengridcomputing.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
parent
d0687be7c7
commit
21515e46bc
@ -183,6 +183,7 @@ static int fast_reg_xdr(struct svcxprt_rdma *xprt,
|
||||
|
||||
fatal_err:
|
||||
printk("svcrdma: Error fast registering memory for xprt %p\n", xprt);
|
||||
vec->frmr = NULL;
|
||||
svc_rdma_put_frmr(xprt, frmr);
|
||||
return -EIO;
|
||||
}
|
||||
@ -516,6 +517,7 @@ static int send_reply(struct svcxprt_rdma *rdma,
|
||||
"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_frmr(rdma, vec->frmr);
|
||||
svc_rdma_put_context(ctxt, 0);
|
||||
return -ENOTCONN;
|
||||
}
|
||||
@ -606,6 +608,7 @@ static int send_reply(struct svcxprt_rdma *rdma,
|
||||
return 0;
|
||||
|
||||
err:
|
||||
svc_rdma_unmap_dma(ctxt);
|
||||
svc_rdma_put_frmr(rdma, vec->frmr);
|
||||
svc_rdma_put_context(ctxt, 1);
|
||||
return -EIO;
|
||||
|
@ -520,8 +520,9 @@ int svc_rdma_post_recv(struct svcxprt_rdma *xprt)
|
||||
svc_xprt_get(&xprt->sc_xprt);
|
||||
ret = ib_post_recv(xprt->sc_qp, &recv_wr, &bad_recv_wr);
|
||||
if (ret) {
|
||||
svc_xprt_put(&xprt->sc_xprt);
|
||||
svc_rdma_unmap_dma(ctxt);
|
||||
svc_rdma_put_context(ctxt, 1);
|
||||
svc_xprt_put(&xprt->sc_xprt);
|
||||
}
|
||||
return ret;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user