mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
nfs4: renewd renew operations should take/put a client reference
renewd sends RENEW requests to the NFS server in order to renew state. As the request is asynchronous, renewd should take a reference to the nfs_client to prevent concurrent umounts from freeing the client Signed-off-by: Alexandros Batsakis <batsakis@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
7135840fc7
commit
0851de0617
1 changed files with 5 additions and 1 deletions
|
@ -3152,7 +3152,9 @@ static void nfs4_renew_release(void *data)
|
|||
{
|
||||
struct nfs_client *clp = data;
|
||||
|
||||
nfs4_schedule_state_renewal(clp);
|
||||
if (atomic_read(&clp->cl_count) > 1)
|
||||
nfs4_schedule_state_renewal(clp);
|
||||
nfs_put_client(clp);
|
||||
}
|
||||
|
||||
static void nfs4_renew_done(struct rpc_task *task, void *data)
|
||||
|
@ -3185,6 +3187,8 @@ int nfs4_proc_async_renew(struct nfs_client *clp, struct rpc_cred *cred)
|
|||
.rpc_cred = cred,
|
||||
};
|
||||
|
||||
if (!atomic_inc_not_zero(&clp->cl_count))
|
||||
return -EIO;
|
||||
return rpc_call_async(clp->cl_rpcclient, &msg, RPC_TASK_SOFT,
|
||||
&nfs4_renew_ops, clp);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue