svc: Move kfree of deferral record to common code
The rqstp structure has a pointer to a svc_deferred_req record that is allocated when requests are deferred. This record is common to all transports and can be freed in common code. Move the kfree of the rq_deferred to the common svc_xprt_release function. This also fixes a memory leak in the RDMA transport which does not kfree the dr structure in it's version of the xpo_release_rqst callback. Signed-off-by: Tom Tucker <tom@opengridcomputing.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
committed by
J. Bruce Fields
parent
f05ef8db1a
commit
2779e3ae39
@@ -448,6 +448,9 @@ static void svc_xprt_release(struct svc_rqst *rqstp)
|
|||||||
|
|
||||||
rqstp->rq_xprt->xpt_ops->xpo_release_rqst(rqstp);
|
rqstp->rq_xprt->xpt_ops->xpo_release_rqst(rqstp);
|
||||||
|
|
||||||
|
kfree(rqstp->rq_deferred);
|
||||||
|
rqstp->rq_deferred = NULL;
|
||||||
|
|
||||||
svc_free_res_pages(rqstp);
|
svc_free_res_pages(rqstp);
|
||||||
rqstp->rq_res.page_len = 0;
|
rqstp->rq_res.page_len = 0;
|
||||||
rqstp->rq_res.page_base = 0;
|
rqstp->rq_res.page_base = 0;
|
||||||
|
@@ -103,7 +103,6 @@ static void svc_reclassify_socket(struct socket *sock)
|
|||||||
static void svc_release_skb(struct svc_rqst *rqstp)
|
static void svc_release_skb(struct svc_rqst *rqstp)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb = rqstp->rq_xprt_ctxt;
|
struct sk_buff *skb = rqstp->rq_xprt_ctxt;
|
||||||
struct svc_deferred_req *dr = rqstp->rq_deferred;
|
|
||||||
|
|
||||||
if (skb) {
|
if (skb) {
|
||||||
struct svc_sock *svsk =
|
struct svc_sock *svsk =
|
||||||
@@ -113,10 +112,6 @@ static void svc_release_skb(struct svc_rqst *rqstp)
|
|||||||
dprintk("svc: service %p, releasing skb %p\n", rqstp, skb);
|
dprintk("svc: service %p, releasing skb %p\n", rqstp, skb);
|
||||||
skb_free_datagram(svsk->sk_sk, skb);
|
skb_free_datagram(svsk->sk_sk, skb);
|
||||||
}
|
}
|
||||||
if (dr) {
|
|
||||||
rqstp->rq_deferred = NULL;
|
|
||||||
kfree(dr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
union svc_pktinfo_u {
|
union svc_pktinfo_u {
|
||||||
|
Reference in New Issue
Block a user