aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2008-10-03 16:48:40 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2008-10-07 18:18:57 -0400
commit96165e2b7c4e2c82a0b60c766d4a2036444c21a0 (patch)
tree8adfc4f16a674671671d8bb27270feb84400260f
parent9a4bd29fe8f6d3f015fe1c8e5450eb62cfebfcc9 (diff)
SUNRPC: Fix a memory leak in rpcb_getport_async
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--net/sunrpc/rpcb_clnt.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
index 172935b046de..0a22f00734a4 100644
--- a/net/sunrpc/rpcb_clnt.c
+++ b/net/sunrpc/rpcb_clnt.c
@@ -580,7 +580,7 @@ void rpcb_getport_async(struct rpc_task *task)
580 status = -ENOMEM; 580 status = -ENOMEM;
581 dprintk("RPC: %5u %s: no memory available\n", 581 dprintk("RPC: %5u %s: no memory available\n",
582 task->tk_pid, __func__); 582 task->tk_pid, __func__);
583 goto bailout_nofree; 583 goto bailout_release_client;
584 } 584 }
585 map->r_prog = clnt->cl_prog; 585 map->r_prog = clnt->cl_prog;
586 map->r_vers = clnt->cl_vers; 586 map->r_vers = clnt->cl_vers;
@@ -605,6 +605,8 @@ void rpcb_getport_async(struct rpc_task *task)
605 rpc_put_task(child); 605 rpc_put_task(child);
606 return; 606 return;
607 607
608bailout_release_client:
609 rpc_release_client(rpcb_clnt);
608bailout_nofree: 610bailout_nofree:
609 rpcb_wake_rpcbind_waiters(xprt, status); 611 rpcb_wake_rpcbind_waiters(xprt, status);
610 task->tk_status = status; 612 task->tk_status = status;