Skip to content

Commit

Permalink
[PATCH] knfsd: nfsd4: add missing rpciod_down()
Browse files Browse the repository at this point in the history
We should be shutting down rpciod for the callback channel when we shut down
the server.

Also note that we do rpciod_up() and create the callback client *before*
setting cb_set--the cb_set only determines whether the initial null was
succesful.  So cb_set is not a reliable determiner of whether we need to clean
up, only cb_client is.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
NeilBrown authored and Linus Torvalds committed Apr 11, 2006
1 parent 541e0e0 commit 4e2fd49
Showing 1 changed file with 14 additions and 7 deletions.
21 changes: 14 additions & 7 deletions fs/nfsd/nfs4state.c
Original file line number Diff line number Diff line change
Expand Up @@ -329,23 +329,30 @@ put_nfs4_client(struct nfs4_client *clp)
free_client(clp);
}

static void
shutdown_callback_client(struct nfs4_client *clp)
{
struct rpc_clnt *clnt = clp->cl_callback.cb_client;

/* shutdown rpc client, ending any outstanding recall rpcs */
if (clnt) {
clp->cl_callback.cb_client = NULL;
rpc_shutdown_client(clnt);
rpciod_down();
}
}

static void
expire_client(struct nfs4_client *clp)
{
struct nfs4_stateowner *sop;
struct nfs4_delegation *dp;
struct nfs4_callback *cb = &clp->cl_callback;
struct rpc_clnt *clnt = clp->cl_callback.cb_client;
struct list_head reaplist;

dprintk("NFSD: expire_client cl_count %d\n",
atomic_read(&clp->cl_count));

/* shutdown rpc client, ending any outstanding recall rpcs */
if (atomic_read(&cb->cb_set) == 1 && clnt) {
rpc_shutdown_client(clnt);
clnt = clp->cl_callback.cb_client = NULL;
}
shutdown_callback_client(clp);

INIT_LIST_HEAD(&reaplist);
spin_lock(&recall_lock);
Expand Down

0 comments on commit 4e2fd49

Please sign in to comment.