nfsd4: don't set cl_firststate on first reclaim in 4.1 case
We set cl_firststate when we first decide that a client will be permitted to reclaim state on next boot. This happens: - for new 4.0 clients, when they confirm their first open - for returning 4.0 clients, when they reclaim their first open - for 4.1+ clients, when they perform reclaim_complete We also use cl_firststate to decide whether a reclaim_complete has already been performed, in the 4.1+ case. We were setting it on 4.1 open reclaims, which caused spurious COMPLETE_ALREADY errors on RECLAIM_COMPLETE from an nfs4.1 client with anything to reclaim. Reported-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
d24433cdc9
commit
1255a8f36c
|
@ -2778,9 +2778,14 @@ nfs4_upgrade_open(struct svc_rqst *rqstp, struct nfs4_file *fp, struct svc_fh *c
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
nfs4_set_claim_prev(struct nfsd4_open *open)
|
nfs4_set_claim_prev(struct nfsd4_open *open, bool has_session)
|
||||||
{
|
{
|
||||||
open->op_openowner->oo_flags |= NFS4_OO_CONFIRMED;
|
open->op_openowner->oo_flags |= NFS4_OO_CONFIRMED;
|
||||||
|
/*
|
||||||
|
* On a 4.1+ client, we don't create a state record for a client
|
||||||
|
* until it performs RECLAIM_COMPLETE:
|
||||||
|
*/
|
||||||
|
if (!has_session)
|
||||||
open->op_openowner->oo_owner.so_client->cl_firststate = 1;
|
open->op_openowner->oo_owner.so_client->cl_firststate = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3044,7 +3049,7 @@ out:
|
||||||
if (fp)
|
if (fp)
|
||||||
put_nfs4_file(fp);
|
put_nfs4_file(fp);
|
||||||
if (status == 0 && open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS)
|
if (status == 0 && open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS)
|
||||||
nfs4_set_claim_prev(open);
|
nfs4_set_claim_prev(open, nfsd4_has_session(&resp->cstate));
|
||||||
/*
|
/*
|
||||||
* To finish the open response, we just need to set the rflags.
|
* To finish the open response, we just need to set the rflags.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue