Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Jul 2015 21:09:43 -0400 (EDT)
From:      Rick Macklem <rmacklem@uoguelph.ca>
To:        d@delphij.net
Cc:        Ahmed Kamal <email.ahmedkamal@googlemail.com>, freebsd-fs@freebsd.org
Subject:   Re: Linux NFSv4 clients are getting (bad sequence-id error!)
Message-ID:  <1491630362.2785531.1435799383802.JavaMail.zimbra@uoguelph.ca>
In-Reply-To: <55947C6E.5060409@delphij.net>
References:  <CANzjMX45QaC8yZx2nHPAohJRvQjmUOHuhMQWP9nX%2BsrJs707Hg@mail.gmail.com> <684628776.2772174.1435793776748.JavaMail.zimbra@uoguelph.ca> <CANzjMX7xKBvnzJhQhB_ZrUnyE2m_FJXXy4fm_RFnuZfBDyDm2A@mail.gmail.com> <55947C6E.5060409@delphij.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Xin Li wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
> 
> On 07/01/15 16:44, Ahmed Kamal via freebsd-fs wrote:
> > The not so great news is, after updating sysctl and rebooting the
> > nas box, I still saw a few (NFS: v4 server nas  returned a bad
> > sequence-id error!) lines in logs. Users have already left, so I
> > don't know how bad is it ..
> > 
> > Could you share more info on what this error means? RedHat seems to
> > think the client can skip-by-1 and choose larger IDs and that would
> > be totally fine ? Also how serious is this error, would it cause
> > NFS session stall like that ?
> 
I just looked at RFC-7530 (which replaced RFC-3530 for NFSv4.0) and
here is the snippet w.r.t. this:
   When a request is received, its sequence number (r) is compared to
   that of the last one received (L).  Only if it has the correct next
   sequence, normally L + 1, is the request processed beyond the point
   of seqid checking.  Given a properly functioning client, the response
   to (r) must have been received before the last request (L) was sent.
   If a duplicate of last request (r == L) is received, the stored
   response is returned.  If the sequence value received is any other
   value, it is rejected with the return of error NFS4ERR_BAD_SEQID.
   Sequence history is reinitialized whenever the SETCLIENTID/
   SETCLIENTID_CONFIRM sequence changes the client verifier.

It seems clear that "L + 2" is not supposed to be allowed.
(The wording in RFC-3530 meant that L + 2 was the case of past
 the correct one, but it was poorly worded I'd say.)
However, the updated RFC has changed one case. For RFC-3530, the
correct value that follows UINT32_MAX is 0. However, for RFC-7530,
the code is supposed to skip over 0 and use 1.
(I think that means that the server must accept both 0 and 1 as the
 correct value following UINT32_MAX.)
It seems that is why the above states "normally L + 1".

I am going to post to nfsv4@ietf.org to see what they say.

Please let me know if Xin Li's patch resolves your problem, even
though I don't believe it is correct except for the UINT32_MAX case.

Good luck with it, rick

> I wonder if this would help, which loosen the check:
> 
> Index: sys/fs/nfsserver/nfs_nfsdstate.c
> ===================================================================
> - --- sys/fs/nfsserver/nfs_nfsdstate.c	(revision 285016)
> +++ sys/fs/nfsserver/nfs_nfsdstate.c	(working copy)
> @@ -3805,7 +3805,8 @@ nfsrv_checkseqid(struct nfsrv_descript *nd, u_int3
>  		printf("refcnt=%d\n", stp->ls_op->rc_refcnt);
>  		panic("nfsrvstate op refcnt");
>  	}
> - -	if ((stp->ls_seq + 1) == seqid) {
> +	if ((stp->ls_seq + 1) == seqid ||
> +	    (stp->ls_seq + 2) == seqid) {
>  		if (stp->ls_op)
>  			nfsrvd_derefcache(stp->ls_op);
>  		stp->ls_op = op;
> 
> 
> Personally I don't quite buy the skip-by-1 is Okay argument but it
> seems that the RFC text can be interpreted that way.
> 
> Cheers,
> 
> 
> > On Thu, Jul 2, 2015 at 1:36 AM, Rick Macklem <rmacklem@uoguelph.ca>
> > wrote:
> > 
> >> Ahmed Kamal wrote:
> >>> Hi all,
> >>> 
> >>> I'm a refugee from linux land. I just set up my first freebsd
> >>> 10.1 zfs
> >> box,
> >>> sharing /home over nfs. Since every home directory is its own
> >>> zfs
> >> dataset,
> >>> I chose to use nfsv4 to enable recursively sharing/mounting any
> >>> directory under /home (I understand nfs4 is a must in this
> >>> scenario!)
> >>> 
> >>> I'm able to mount form linux (rhel5 latest kernel)
> >>> successfully. Users
> >> are
> >>> working fine. However every now and then a user screams that
> >>> his session
> >> is
> >>> frozen. Usually the processes are stuck in nfs_wait or rpc_*
> >>> state. I
> >> tried
> >>> using a much newer linux kernel (3.2 however it still faced the
> >>> same problem). The errors in Linux log files are mostly: Jul  1
> >>> 17:41:47 mammoth kernel: NFS: v4 server nas  returned a *bad
> >>> sequence-id error*! Jul  1 17:52:32 mammoth kernel:
> >>> nfs4_reclaim_locks: unhandled error -11. Zeroing state Jul  1
> >>> 17:52:32 mammoth kernel: nfs4_reclaim_open_state: Lock reclaim
> >>> failed!
> >>> 
> >> Btw, a client should only do "reclaim" operations after the
> >> server has replied with NFS4ERR_STALE_CLIENTID or
> >> NFS4ERR_STALE_STATEID. I am pretty certain that the FreeBSD NFSv4
> >> server only generates these replies after it has rebooted, so
> >> assuming the server didn't reboot, I have no idea why the client
> >> would attempt these and am not surprised they failed.
> >> 
> >> I'm guessing that the DRC constipation somehow caused the Linux
> >> client to go into recovery mode?
> >> 
> >> rick
> >> 
> >>> My search led me to
> >>> (https://access.redhat.com/solutions/1328073) a detailed
> >>> analysis of the issue, which you can read over here
> >>> https://dl.dropboxusercontent.com/u/51939288/nfs4-bad-seq.pdf
> >>> .. NetApp confirmed this was a bug for them (I'm wondering if
> >>> this is still in FreeBSD?!)
> >>> 
> >>> PS: Right before sending this, I saw dmesg on the freebsd box
> >>> advising increasing vfs.nfsd.tcphighwater .. So I up'ed that to
> >>> 64000. I also
> >> up'ed
> >>> the number of nfs server threads (-t) from 10 to 60 (we're
> >>> roughly 40
> >> linux
> >>> machines)
> >>> 
> >>> Any advice is most appreciated!
> >>> 
> >>> Thanks _______________________________________________
> >>> freebsd-fs@freebsd.org mailing list
> >>> http://lists.freebsd.org/mailman/listinfo/freebsd-fs To
> >>> unsubscribe, send any mail to
> >>> "freebsd-fs-unsubscribe@freebsd.org"
> >>> 
> >> 
> > _______________________________________________
> > freebsd-fs@freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-fs To
> > unsubscribe, send any mail to "freebsd-fs-unsubscribe@freebsd.org"
> > 
> 
> 
> - --
> Xin LI <delphij@delphij.net>    https://www.delphij.net/
> FreeBSD - The Power to Serve!           Live free or die
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2.1.5 (FreeBSD)
> 
> iQIcBAEBCgAGBQJVlHxuAAoJEJW2GBstM+nskvsP/ire8QyTfL6mF1njMNZwI/k5
> AQ+BwWs5r8LzcRN/4v7/gelbS+lXnYVbVHMl8q6j+HzUzQ3yId4ZGlJWpJtHDNnj
> +gV8kmFt/og1QTrQRbN81i4GEr914SlKWmo7LsxrWmEhAiKsN0sYsjELD/mH5BZX
> 1wRe3vTvyrMwm+6u1krqT8ZrxRANBFBmNqiFb8sag7B3oJQZsGhAyUSsJvUhb00o
> ozwC2NT5y8Jv0QcZdC/wGeYc8FmRNQTAjE22WkzbsUey/e7FxL7vflCGgngYCIxE
> zbZNW65xThZO8fti5MxiepJ27VPa5ocX0CQihBFYp5haG6fzWBGalV/ggAOwYL44
> nz1caLhdKIj9JSd8QwLdTArq8+6H8Sx4jp4iGzQnppNo8PtG/AlHlw9uDKaUF4iw
> H+tMb6qMu2FQJ9X+phtplzvjZxCbBbwY205GeTm5eElOkYzIyYvqIvZasos02ze0
> v3SQXtpIHjrnndXMVNRJOkhYquGxVFxUm5IJ7o+0wrgVJp1V3cBKd4vs0o84Mgu5
> EPGKCyt8x/B6ujCxkunODpNOb+sFyq6aqsDLAO6JSih5HfQntpxoZTjm8p4KjsG6
> nPqXQXmi2NoOd6WPOunp7w/y+fKA4YdLAhPC7rbXQwpLL81UqNH141BrtscN0ovi
> pyRlJ4r3Zs75qUwVSkzL
> =3/OG
> -----END PGP SIGNATURE-----
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1491630362.2785531.1435799383802.JavaMail.zimbra>