nfsd4: rearrange cb data structures
Mainly I just want to separate the arguments used for setting up the tcp client from the rest. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
@@ -726,8 +726,8 @@ expire_client(struct nfs4_client *clp)
|
||||
release_session(ses);
|
||||
}
|
||||
nfsd4_set_callback_client(clp, NULL);
|
||||
if (clp->cl_cb_xprt)
|
||||
svc_xprt_put(clp->cl_cb_xprt);
|
||||
if (clp->cl_cb_conn.cb_xprt)
|
||||
svc_xprt_put(clp->cl_cb_conn.cb_xprt);
|
||||
free_client(clp);
|
||||
}
|
||||
|
||||
@@ -814,7 +814,7 @@ static struct nfs4_client *create_client(struct xdr_netobj name, char *recdir,
|
||||
}
|
||||
|
||||
memcpy(clp->cl_recdir, recdir, HEXDIR_LEN);
|
||||
atomic_set(&clp->cl_cb_conn.cb_set, 0);
|
||||
atomic_set(&clp->cl_cb_set, 0);
|
||||
INIT_LIST_HEAD(&clp->cl_idhash);
|
||||
INIT_LIST_HEAD(&clp->cl_strhash);
|
||||
INIT_LIST_HEAD(&clp->cl_openowners);
|
||||
@@ -1302,8 +1302,8 @@ nfsd4_create_session(struct svc_rqst *rqstp,
|
||||
move_to_confirmed(unconf);
|
||||
|
||||
if (cr_ses->flags & SESSION4_BACK_CHAN) {
|
||||
unconf->cl_cb_xprt = rqstp->rq_xprt;
|
||||
svc_xprt_get(unconf->cl_cb_xprt);
|
||||
unconf->cl_cb_conn.cb_xprt = rqstp->rq_xprt;
|
||||
svc_xprt_get(rqstp->rq_xprt);
|
||||
rpc_copy_addr(
|
||||
(struct sockaddr *)&unconf->cl_cb_conn.cb_addr,
|
||||
sa);
|
||||
@@ -1607,7 +1607,7 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
|
||||
else {
|
||||
/* XXX: We just turn off callbacks until we can handle
|
||||
* change request correctly. */
|
||||
atomic_set(&conf->cl_cb_conn.cb_set, 0);
|
||||
atomic_set(&conf->cl_cb_set, 0);
|
||||
expire_client(unconf);
|
||||
status = nfs_ok;
|
||||
|
||||
@@ -2320,7 +2320,7 @@ nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, struct nfs4_sta
|
||||
{
|
||||
struct nfs4_delegation *dp;
|
||||
struct nfs4_stateowner *sop = stp->st_stateowner;
|
||||
struct nfs4_cb_conn *cb = &sop->so_client->cl_cb_conn;
|
||||
int cb_up = atomic_read(&sop->so_client->cl_cb_set);
|
||||
struct file_lock fl, *flp = &fl;
|
||||
int status, flag = 0;
|
||||
|
||||
@@ -2328,7 +2328,7 @@ nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, struct nfs4_sta
|
||||
open->op_recall = 0;
|
||||
switch (open->op_claim_type) {
|
||||
case NFS4_OPEN_CLAIM_PREVIOUS:
|
||||
if (!atomic_read(&cb->cb_set))
|
||||
if (!cb_up)
|
||||
open->op_recall = 1;
|
||||
flag = open->op_delegate_type;
|
||||
if (flag == NFS4_OPEN_DELEGATE_NONE)
|
||||
@@ -2339,7 +2339,7 @@ nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, struct nfs4_sta
|
||||
* had the chance to reclaim theirs.... */
|
||||
if (locks_in_grace())
|
||||
goto out;
|
||||
if (!atomic_read(&cb->cb_set) || !sop->so_confirmed)
|
||||
if (!cb_up || !sop->so_confirmed)
|
||||
goto out;
|
||||
if (open->op_share_access & NFS4_SHARE_ACCESS_WRITE)
|
||||
flag = NFS4_OPEN_DELEGATE_WRITE;
|
||||
@@ -2510,7 +2510,7 @@ nfsd4_renew(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
||||
renew_client(clp);
|
||||
status = nfserr_cb_path_down;
|
||||
if (!list_empty(&clp->cl_delegations)
|
||||
&& !atomic_read(&clp->cl_cb_conn.cb_set))
|
||||
&& !atomic_read(&clp->cl_cb_set))
|
||||
goto out;
|
||||
status = nfs_ok;
|
||||
out:
|
||||
|
Reference in New Issue
Block a user