mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 11:06:41 -05:00
NFSv4.1: pass transport for callback shutdown
When we are setting up the 4.1 callback server, we pass in the appropriate rpc_xprt transport pointer with which to associate the callback server structure. Similarly, pass in the rpc_xprt pointer for when we are shutting down the callback. This will be used to make sure that we free the server structure and then clear the rpc_xprt's bc_server pointer in a safe manner. Signed-off-by: Olga Kornievskaia <okorniev@redhat.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
committed by
Trond Myklebust
parent
2e47c3cc64
commit
8936ff4736
@@ -258,7 +258,7 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
|
||||
/*
|
||||
* Kill the callback thread if it's no longer being used.
|
||||
*/
|
||||
void nfs_callback_down(int minorversion, struct net *net)
|
||||
void nfs_callback_down(int minorversion, struct net *net, struct rpc_xprt *xprt)
|
||||
{
|
||||
struct nfs_callback_data *cb_info = &nfs_callback_info[minorversion];
|
||||
struct svc_serv *serv;
|
||||
|
||||
@@ -188,7 +188,8 @@ extern __be32 nfs4_callback_recall(void *argp, void *resp,
|
||||
struct cb_process_state *cps);
|
||||
#if IS_ENABLED(CONFIG_NFS_V4)
|
||||
extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt);
|
||||
extern void nfs_callback_down(int minorversion, struct net *net);
|
||||
extern void nfs_callback_down(int minorversion, struct net *net,
|
||||
struct rpc_xprt *xprt);
|
||||
#endif /* CONFIG_NFS_V4 */
|
||||
/*
|
||||
* nfs41: Callbacks are expected to not cause substantial latency,
|
||||
|
||||
@@ -281,8 +281,13 @@ struct nfs_client *nfs4_alloc_client(const struct nfs_client_initdata *cl_init)
|
||||
*/
|
||||
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_mvops->minor_version, clp->cl_net);
|
||||
if (__test_and_clear_bit(NFS_CS_CALLBACK, &clp->cl_res_state)) {
|
||||
struct rpc_xprt *xprt;
|
||||
|
||||
xprt = rcu_dereference_raw(clp->cl_rpcclient->cl_xprt);
|
||||
nfs_callback_down(clp->cl_mvops->minor_version, clp->cl_net,
|
||||
xprt);
|
||||
}
|
||||
}
|
||||
|
||||
static void nfs4_shutdown_client(struct nfs_client *clp)
|
||||
|
||||
Reference in New Issue
Block a user