From 3364badbc52f924c513ffc576685e00bb4b286fe Mon Sep 17 00:00:00 2001 From: "J. Bruce Fields" Date: Tue, 6 Mar 2012 14:35:16 -0500 Subject: [PATCH] --- yaml --- r: 297444 b: refs/heads/master c: 1255a8f36cb16a02540bdad91c0bc0971b9fb429 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/nfsd/nfs4state.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 83198496e331..0774d42b8c8a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d24433cdc91c0ed15938d2a6ee9e3e1b00fcfaa3 +refs/heads/master: 1255a8f36cb16a02540bdad91c0bc0971b9fb429 diff --git a/trunk/fs/nfsd/nfs4state.c b/trunk/fs/nfsd/nfs4state.c index 967c677c2e54..207c3bd266aa 100644 --- a/trunk/fs/nfsd/nfs4state.c +++ b/trunk/fs/nfsd/nfs4state.c @@ -2778,10 +2778,15 @@ nfs4_upgrade_open(struct svc_rqst *rqstp, struct nfs4_file *fp, struct svc_fh *c 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_owner.so_client->cl_firststate = 1; + /* + * 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; } /* Should we give out recallable state?: */ @@ -3044,7 +3049,7 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf if (fp) put_nfs4_file(fp); 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. */