aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/fs/nfsclient/nfs_clrpcops.c33
-rw-r--r--sys/fs/nfsclient/nfs_clstate.c23
-rw-r--r--sys/fs/nfsclient/nfsmount.h1
3 files changed, 11 insertions, 46 deletions
diff --git a/sys/fs/nfsclient/nfs_clrpcops.c b/sys/fs/nfsclient/nfs_clrpcops.c
index 09660730d485..75bb5236cb65 100644
--- a/sys/fs/nfsclient/nfs_clrpcops.c
+++ b/sys/fs/nfsclient/nfs_clrpcops.c
@@ -561,34 +561,21 @@ nfsrpc_openrpc(struct nfsmount *nmp, vnode_t vp, u_int8_t *nfhp, int fhlen,
*tl = txdr_unsigned(delegtype);
} else {
if (dp != NULL) {
- if (NFSHASNFSV4N(nmp)) {
+ if (NFSHASNFSV4N(nmp))
*tl = txdr_unsigned(
NFSV4OPEN_CLAIMDELEGATECURFH);
- NFSLOCKMNT(nmp);
- if ((nmp->nm_privflag & NFSMNTP_BUGGYFBSDSRV) !=
- 0) {
- NFSUNLOCKMNT(nmp);
- /*
- * Add a stateID argument to make old
- * broken FreeBSD NFSv4.1/4.2 servers
- * happy.
- */
- NFSM_BUILD(tl, uint32_t *,NFSX_STATEID);
- *tl++ = 0;
- *tl++ = dp->nfsdl_stateid.other[0];
- *tl++ = dp->nfsdl_stateid.other[1];
- *tl = dp->nfsdl_stateid.other[2];
- } else
- NFSUNLOCKMNT(nmp);
- } else {
+ else
*tl = txdr_unsigned(NFSV4OPEN_CLAIMDELEGATECUR);
- NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID);
+ NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID);
+ if (NFSHASNFSV4N(nmp))
+ *tl++ = 0;
+ else
*tl++ = dp->nfsdl_stateid.seqid;
- *tl++ = dp->nfsdl_stateid.other[0];
- *tl++ = dp->nfsdl_stateid.other[1];
- *tl = dp->nfsdl_stateid.other[2];
+ *tl++ = dp->nfsdl_stateid.other[0];
+ *tl++ = dp->nfsdl_stateid.other[1];
+ *tl = dp->nfsdl_stateid.other[2];
+ if (!NFSHASNFSV4N(nmp))
(void)nfsm_strtom(nd, name, namelen);
- }
} else if (NFSHASNFSV4N(nmp)) {
*tl = txdr_unsigned(NFSV4OPEN_CLAIMFH);
} else {
diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c
index ebc11efea637..9fbaa6e63a56 100644
--- a/sys/fs/nfsclient/nfs_clstate.c
+++ b/sys/fs/nfsclient/nfs_clstate.c
@@ -4512,7 +4512,6 @@ nfscl_tryopen(struct nfsmount *nmp, vnode_t vp, u_int8_t *fhp, int fhlen,
{
int error;
struct nfscldeleg *dp;
- bool try_busted_xdr;
dp = *ndpp;
do {
@@ -4520,29 +4519,9 @@ nfscl_tryopen(struct nfsmount *nmp, vnode_t vp, u_int8_t *fhp, int fhlen,
error = nfsrpc_openrpc(nmp, vp, fhp, fhlen, newfhp, newfhlen,
mode, op, name, namelen, ndpp, reclaim, delegtype, cred, p,
0, 0);
- try_busted_xdr = false;
if (error == NFSERR_DELAY)
(void) nfs_catnap(PZERO, error, "nfstryop");
- else if (error == NFSERR_EXPIRED && NFSHASNFSV4N(nmp) &&
- reclaim == 0 && dp != NULL) {
- /* This case is a Claim_Deleg_Cur_FH Open. */
- NFSLOCKMNT(nmp);
- if ((nmp->nm_privflag & NFSMNTP_BUGGYFBSDSRV) == 0) {
- /*
- * Old FreeBSD NFSv4.1/4.2 servers erroneously
- * expect a stateID argument for Open
- * Claim_Deleg_Cur_FH and interpret the
- * Getattr reply as a stateID. This results
- * in an NFSERR_EXPIRED failure.
- * Setting NFSMNTP_BUGGYFBSDSRV makes the Open
- * send a stateID, in violation of RFC8881.
- */
- try_busted_xdr = true;
- nmp->nm_privflag |= NFSMNTP_BUGGYFBSDSRV;
- }
- NFSUNLOCKMNT(nmp);
- }
- } while (error == NFSERR_DELAY || try_busted_xdr);
+ } while (error == NFSERR_DELAY);
if (error == EAUTH || error == EACCES) {
/* Try again using system credentials */
newnfs_setroot(cred);
diff --git a/sys/fs/nfsclient/nfsmount.h b/sys/fs/nfsclient/nfsmount.h
index 7571add27b9c..37b84a015dab 100644
--- a/sys/fs/nfsclient/nfsmount.h
+++ b/sys/fs/nfsclient/nfsmount.h
@@ -124,7 +124,6 @@ struct nfsmount {
#define NFSMNTP_DELEGISSUED 0x00000400
#define NFSMNTP_NODEALLOCATE 0x00000800
#define NFSMNTP_FAKEROOTFH 0x00001000
-#define NFSMNTP_BUGGYFBSDSRV 0x00002000
/* New mount flags only used by the kernel via nmount(2). */
#define NFSMNT_TLS 0x00000001