Loading include/linux/sunrpc/clnt.h +1 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ struct rpc_clnt { struct dentry * cl_dentry; /* inode */ struct rpc_clnt * cl_parent; /* Points to parent of clones */ struct rpc_rtt cl_rtt_default; struct rpc_program * cl_program; char cl_inline_name[32]; }; Loading net/sunrpc/clnt.c +13 −10 Original line number Diff line number Diff line Loading @@ -144,6 +144,7 @@ static struct rpc_clnt * rpc_new_client(struct rpc_xprt *xprt, char *servname, s err = -ENOMEM; if (clnt->cl_metrics == NULL) goto out_no_stats; clnt->cl_program = program; if (!xprt_bound(clnt->cl_xprt)) clnt->cl_autobind = 1; Loading Loading @@ -257,6 +258,7 @@ struct rpc_clnt * rpc_clone_client(struct rpc_clnt *clnt) { struct rpc_clnt *new; int err = -ENOMEM; new = kmemdup(clnt, sizeof(*new), GFP_KERNEL); if (!new) Loading @@ -266,6 +268,9 @@ rpc_clone_client(struct rpc_clnt *clnt) new->cl_metrics = rpc_alloc_iostats(clnt); if (new->cl_metrics == NULL) goto out_no_stats; err = rpc_setup_pipedir(new, clnt->cl_program->pipe_dir_name); if (err != 0) goto out_no_path; new->cl_parent = clnt; atomic_inc(&clnt->cl_count); new->cl_xprt = xprt_get(clnt->cl_xprt); Loading @@ -273,17 +278,17 @@ rpc_clone_client(struct rpc_clnt *clnt) new->cl_autobind = 0; new->cl_oneshot = 0; new->cl_dead = 0; if (!IS_ERR(new->cl_dentry)) dget(new->cl_dentry); rpc_init_rtt(&new->cl_rtt_default, clnt->cl_xprt->timeout.to_initval); if (new->cl_auth) atomic_inc(&new->cl_auth->au_count); return new; out_no_path: rpc_free_iostats(new->cl_metrics); out_no_stats: kfree(new); out_no_clnt: printk(KERN_INFO "RPC: out of memory in %s\n", __FUNCTION__); return ERR_PTR(-ENOMEM); dprintk("RPC: %s returned error %d\n", __FUNCTION__, err); return ERR_PTR(err); } /* Loading Loading @@ -336,16 +341,14 @@ rpc_destroy_client(struct rpc_clnt *clnt) rpcauth_destroy(clnt->cl_auth); clnt->cl_auth = NULL; } if (clnt->cl_parent != clnt) { if (!IS_ERR(clnt->cl_dentry)) dput(clnt->cl_dentry); rpc_destroy_client(clnt->cl_parent); goto out_free; } if (!IS_ERR(clnt->cl_dentry)) { rpc_rmdir(clnt->cl_dentry); rpc_put_mount(); } if (clnt->cl_parent != clnt) { rpc_destroy_client(clnt->cl_parent); goto out_free; } if (clnt->cl_server != clnt->cl_inline_name) kfree(clnt->cl_server); out_free: Loading Loading
include/linux/sunrpc/clnt.h +1 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ struct rpc_clnt { struct dentry * cl_dentry; /* inode */ struct rpc_clnt * cl_parent; /* Points to parent of clones */ struct rpc_rtt cl_rtt_default; struct rpc_program * cl_program; char cl_inline_name[32]; }; Loading
net/sunrpc/clnt.c +13 −10 Original line number Diff line number Diff line Loading @@ -144,6 +144,7 @@ static struct rpc_clnt * rpc_new_client(struct rpc_xprt *xprt, char *servname, s err = -ENOMEM; if (clnt->cl_metrics == NULL) goto out_no_stats; clnt->cl_program = program; if (!xprt_bound(clnt->cl_xprt)) clnt->cl_autobind = 1; Loading Loading @@ -257,6 +258,7 @@ struct rpc_clnt * rpc_clone_client(struct rpc_clnt *clnt) { struct rpc_clnt *new; int err = -ENOMEM; new = kmemdup(clnt, sizeof(*new), GFP_KERNEL); if (!new) Loading @@ -266,6 +268,9 @@ rpc_clone_client(struct rpc_clnt *clnt) new->cl_metrics = rpc_alloc_iostats(clnt); if (new->cl_metrics == NULL) goto out_no_stats; err = rpc_setup_pipedir(new, clnt->cl_program->pipe_dir_name); if (err != 0) goto out_no_path; new->cl_parent = clnt; atomic_inc(&clnt->cl_count); new->cl_xprt = xprt_get(clnt->cl_xprt); Loading @@ -273,17 +278,17 @@ rpc_clone_client(struct rpc_clnt *clnt) new->cl_autobind = 0; new->cl_oneshot = 0; new->cl_dead = 0; if (!IS_ERR(new->cl_dentry)) dget(new->cl_dentry); rpc_init_rtt(&new->cl_rtt_default, clnt->cl_xprt->timeout.to_initval); if (new->cl_auth) atomic_inc(&new->cl_auth->au_count); return new; out_no_path: rpc_free_iostats(new->cl_metrics); out_no_stats: kfree(new); out_no_clnt: printk(KERN_INFO "RPC: out of memory in %s\n", __FUNCTION__); return ERR_PTR(-ENOMEM); dprintk("RPC: %s returned error %d\n", __FUNCTION__, err); return ERR_PTR(err); } /* Loading Loading @@ -336,16 +341,14 @@ rpc_destroy_client(struct rpc_clnt *clnt) rpcauth_destroy(clnt->cl_auth); clnt->cl_auth = NULL; } if (clnt->cl_parent != clnt) { if (!IS_ERR(clnt->cl_dentry)) dput(clnt->cl_dentry); rpc_destroy_client(clnt->cl_parent); goto out_free; } if (!IS_ERR(clnt->cl_dentry)) { rpc_rmdir(clnt->cl_dentry); rpc_put_mount(); } if (clnt->cl_parent != clnt) { rpc_destroy_client(clnt->cl_parent); goto out_free; } if (clnt->cl_server != clnt->cl_inline_name) kfree(clnt->cl_server); out_free: Loading