From: NeilBrown Setclientid code assumes there is only one match in unconfirmed list. Make sure that assumption holds. From: Fred Isaman Signed-off-by: J. Bruce Fields Signed-off-by: Neil Brown Signed-off-by: Andrew Morton --- fs/nfsd/nfs4state.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) diff -puN fs/nfsd/nfs4state.c~nfsd4-fix-uncomfirmed-list fs/nfsd/nfs4state.c --- 25/fs/nfsd/nfs4state.c~nfsd4-fix-uncomfirmed-list Thu Jun 2 16:25:19 2005 +++ 25-akpm/fs/nfsd/nfs4state.c Thu Jun 2 16:25:19 2005 @@ -743,10 +743,13 @@ nfsd4_setclientid(struct svc_rqst *rqstp * nfs4_client, but with the new callback info and a * new cl_confirm */ - if ((unconf) && - cmp_verf(&unconf->cl_verifier, &conf->cl_verifier) && - cmp_clid(&unconf->cl_clientid, &conf->cl_clientid)) { - expire_client(unconf); + if (unconf) { + /* Note this is removing unconfirmed {*x***}, + * which is stronger than RFC recommended {vxc**}. + * This has the advantage that there is at most + * one {*x***} in either list at any time. + */ + expire_client(unconf); } new = create_client(clname, dname); if (new == NULL) _