Skip to content

Commit

Permalink
SUNRPC: Add an identifier for struct rpc_clnt
Browse files Browse the repository at this point in the history
Add an identifier in order to aid debugging.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
  • Loading branch information
Trond Myklebust authored and Trond Myklebust committed Sep 5, 2013
1 parent 8d1018c commit 2f048db
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/linux/sunrpc/clnt.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ struct rpc_inode;
*/
struct rpc_clnt {
atomic_t cl_count; /* Number of references */
unsigned int cl_clid; /* client id */
struct list_head cl_clients; /* Global list of clients */
struct list_head cl_tasks; /* List of tasks */
spinlock_t cl_lock; /* spinlock */
Expand Down
25 changes: 25 additions & 0 deletions net/sunrpc/clnt.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,24 @@ static int rpc_client_register(const struct rpc_create_args *args,
return err;
}

static DEFINE_IDA(rpc_clids);

static int rpc_alloc_clid(struct rpc_clnt *clnt)
{
int clid;

clid = ida_simple_get(&rpc_clids, 0, 0, GFP_KERNEL);
if (clid < 0)
return clid;
clnt->cl_clid = clid;
return 0;
}

static void rpc_free_clid(struct rpc_clnt *clnt)
{
ida_simple_remove(&rpc_clids, clnt->cl_clid);
}

static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args,
struct rpc_xprt *xprt,
struct rpc_clnt *parent)
Expand Down Expand Up @@ -343,6 +361,10 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args,
goto out_err;
clnt->cl_parent = parent ? : clnt;

err = rpc_alloc_clid(clnt);
if (err)
goto out_no_clid;

rcu_assign_pointer(clnt->cl_xprt, xprt);
clnt->cl_procinfo = version->procs;
clnt->cl_maxproc = version->nrprocs;
Expand Down Expand Up @@ -386,6 +408,8 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args,
out_no_path:
rpc_free_iostats(clnt->cl_metrics);
out_no_stats:
rpc_free_clid(clnt);
out_no_clid:
kfree(clnt);
out_err:
rpciod_down();
Expand Down Expand Up @@ -646,6 +670,7 @@ rpc_free_client(struct rpc_clnt *clnt)
clnt->cl_metrics = NULL;
xprt_put(rcu_dereference_raw(clnt->cl_xprt));
rpciod_down();
rpc_free_clid(clnt);
kfree(clnt);
}

Expand Down

0 comments on commit 2f048db

Please sign in to comment.