Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 888ef2e3 authored by Alexandros Batsakis's avatar Alexandros Batsakis Committed by Trond Myklebust
Browse files

nfs: kill renewd before clearing client minor version



renewd should be synchronously killed before we destroy the session in
nfs4_clear_minor_version

Signed-off-by: default avatarAlexandros Batsakis <batsakis@netapp.com>
[Trond.Myklebust@netapp.com: clean up to remove 'unused function
warning when !CONFIG_NFS_V4]
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent f895c53f
Loading
Loading
Loading
Loading
+24 −24
Original line number Original line Diff line number Diff line
@@ -164,30 +164,7 @@ error_0:
	return ERR_PTR(err);
	return ERR_PTR(err);
}
}


static void nfs4_shutdown_client(struct nfs_client *clp)
{
#ifdef CONFIG_NFS_V4
	if (__test_and_clear_bit(NFS_CS_RENEWD, &clp->cl_res_state))
		nfs4_kill_renewd(clp);
	BUG_ON(!RB_EMPTY_ROOT(&clp->cl_state_owners));
	if (__test_and_clear_bit(NFS_CS_IDMAP, &clp->cl_res_state))
		nfs_idmap_delete(clp);

	rpc_destroy_wait_queue(&clp->cl_rpcwaitq);
#endif
}

/*
 * Destroy the NFS4 callback service
 */
static void nfs4_destroy_callback(struct nfs_client *clp)
{
#ifdef CONFIG_NFS_V4
#ifdef CONFIG_NFS_V4
	if (__test_and_clear_bit(NFS_CS_CALLBACK, &clp->cl_res_state))
		nfs_callback_down(clp->cl_minorversion);
#endif /* CONFIG_NFS_V4 */
}

/*
/*
 * Clears/puts all minor version specific parts from an nfs_client struct
 * Clears/puts all minor version specific parts from an nfs_client struct
 * reverting it to minorversion 0.
 * reverting it to minorversion 0.
@@ -202,9 +179,33 @@ static void nfs4_clear_client_minor_version(struct nfs_client *clp)


	clp->cl_call_sync = _nfs4_call_sync;
	clp->cl_call_sync = _nfs4_call_sync;
#endif /* CONFIG_NFS_V4_1 */
#endif /* CONFIG_NFS_V4_1 */
}


/*
 * Destroy the NFS4 callback service
 */
static void nfs4_destroy_callback(struct nfs_client *clp)
{
	if (__test_and_clear_bit(NFS_CS_CALLBACK, &clp->cl_res_state))
		nfs_callback_down(clp->cl_minorversion);
}

static void nfs4_shutdown_client(struct nfs_client *clp)
{
	if (__test_and_clear_bit(NFS_CS_RENEWD, &clp->cl_res_state))
		nfs4_kill_renewd(clp);
	nfs4_clear_client_minor_version(clp);
	nfs4_destroy_callback(clp);
	nfs4_destroy_callback(clp);
	if (__test_and_clear_bit(NFS_CS_IDMAP, &clp->cl_res_state))
		nfs_idmap_delete(clp);

	rpc_destroy_wait_queue(&clp->cl_rpcwaitq);
}
}
#else
static void nfs4_shutdown_client(struct nfs_client *clp)
{
}
#endif /* CONFIG_NFS_V4 */


/*
/*
 * Destroy a shared client record
 * Destroy a shared client record
@@ -213,7 +214,6 @@ static void nfs_free_client(struct nfs_client *clp)
{
{
	dprintk("--> nfs_free_client(%u)\n", clp->rpc_ops->version);
	dprintk("--> nfs_free_client(%u)\n", clp->rpc_ops->version);


	nfs4_clear_client_minor_version(clp);
	nfs4_shutdown_client(clp);
	nfs4_shutdown_client(clp);


	nfs_fscache_release_client_cookie(clp);
	nfs_fscache_release_client_cookie(clp);