Date: Thu, 15 Apr 2021 21:15:29 GMT From: Rick Macklem <rmacklem@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 34256484aff2 - main - Revert "nfsd: cut the Linux NFSv4.1/4.2 some slack w.r.t. RFC5661" Message-ID: <202104152115.13FLFTO9090834@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by rmacklem: URL: https://cgit.FreeBSD.org/src/commit/?id=34256484aff285f460a98c089b030228448fe19f commit 34256484aff285f460a98c089b030228448fe19f Author: Rick Macklem <rmacklem@FreeBSD.org> AuthorDate: 2021-04-15 21:08:40 +0000 Commit: Rick Macklem <rmacklem@FreeBSD.org> CommitDate: 2021-04-15 21:08:40 +0000 Revert "nfsd: cut the Linux NFSv4.1/4.2 some slack w.r.t. RFC5661" This reverts commit 9edaceca8165e2864267547311daf145bb520270. It turns out that the Linux client intentionally does an NFSv4.1 RPC with only a Sequence operation in it and with "seqid + 1" for the slot. This is used to re-synchronize the slot's seqid and the client expects the NFS4ERR_SEQ_MISORDERED error reply. As such, revert the patch, so that the server remains RFC5661 compliant. --- sys/fs/nfs/nfs_commonsubs.c | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/sys/fs/nfs/nfs_commonsubs.c b/sys/fs/nfs/nfs_commonsubs.c index d7009b1e0ca4..4afa4c2d9ab4 100644 --- a/sys/fs/nfs/nfs_commonsubs.c +++ b/sys/fs/nfs/nfs_commonsubs.c @@ -98,11 +98,6 @@ int nfs_maxcopyrange = 10 * 1024 * 1024; SYSCTL_INT(_vfs_nfs, OID_AUTO, maxcopyrange, CTLFLAG_RW, &nfs_maxcopyrange, 0, "Max size of a Copy so RPC times reasonable"); -static int nfs_allowskip_sessionseq = 1; -SYSCTL_INT(_vfs_nfs, OID_AUTO, linuxseqsesshack, CTLFLAG_RW, - &nfs_allowskip_sessionseq, 0, "Allow client to skip ahead one seq# for" - " session slot"); - /* * This array of structures indicates, for V4: * retfh - which of 3 types of calling args are used @@ -4619,7 +4614,7 @@ nfsmout: * Handle an NFSv4.1 Sequence request for the session. * If reply != NULL, use it to return the cached reply, as required. * The client gets a cached reply via this call for callbacks, however the - * server gets a cached reply via the nfsv4_seqsess_cacherep() call. + * server gets a cached reply via the nfsv4_seqsess_cachereply() call. */ int nfsv4_seqsession(uint32_t seqid, uint32_t slotid, uint32_t highslot, @@ -4653,24 +4648,12 @@ nfsv4_seqsession(uint32_t seqid, uint32_t slotid, uint32_t highslot, } else /* No reply cached, so just do it. */ slots[slotid].nfssl_inprog = 1; - } else if (slots[slotid].nfssl_seq + 1 == seqid || - (slots[slotid].nfssl_seq + 2 == seqid && - nfs_allowskip_sessionseq != 0)) { - /* - * Allowing the seqid to be ahead by 2 is technically - * a violation of RFC5661, but it seems harmless to do - * and avoids returning NFSERR_SEQMISORDERED to a - * slightly broken Linux NFSv4.1/4.2 client. - * If the RPCs are really out of order, one with a - * lower seqid will be subsequently received and that - * one will get a NFSERR_SEQMISORDERED reply. - * Can be disabled by setting vfs.nfs.linuxseqsesshack to 0. - */ + } else if ((slots[slotid].nfssl_seq + 1) == seqid) { if (slots[slotid].nfssl_reply != NULL) m_freem(slots[slotid].nfssl_reply); slots[slotid].nfssl_reply = NULL; slots[slotid].nfssl_inprog = 1; - slots[slotid].nfssl_seq = seqid; + slots[slotid].nfssl_seq++; } else error = NFSERR_SEQMISORDERED; return (error);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202104152115.13FLFTO9090834>