提交 0851de06 编写于 作者: A Alexandros Batsakis 提交者: Trond Myklebust

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: NAlexandros Batsakis <batsakis@netapp.com>
Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
上级 7135840f
......@@ -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);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册