Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 3 Sep 2010 20:55:07 -0400 (EDT)
From:      Rick Macklem <rmacklem@uoguelph.ca>
To:        David Brodbeck <gull@gull.us>
Cc:        freebsd-fs@freebsd.org
Subject:   Re: Weird Linux - FreeBSD/ZFS NFSv4 interoperability problem
Message-ID:  <929991361.487274.1283561707352.JavaMail.root@erie.cs.uoguelph.ca>
In-Reply-To: <AANLkTimUD5jqfPrZL5TdS15t0Nxv=WTcwsrQt7w4kXKx@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
> 
> Here's a capture for you. This is a Linux client (192.168.30.30)
> working against a FreeBSD 8.1-RELEASE server (192.168.30.102). If you
> need a capture using FreeBSD 9, that'll require some more setup on my
> part and I won't be able to get to it until Monday.

Ok, The server is returning NFS4ERR_OLD_STATEID, which means that the
seqid# inside the stateid is out of date. I think the original intent
of this was to be a debugging aid for client writers, but a discussion
on the nfsv4 mailing list pretty much concluded that it was useless.
(It is definitely the case that the server doesn't care. A separate
seqd# is used to order the open/lock/close ops.)

So, please try the attached little patch that just disables the server
check for this case for Close. (The line #s will be different than
8.1, but all it is doing is commenting out the test for this case in
nfsrv_openupdate(), if the patch won't apply directly.)

I'm almost at the point where I'll just disable all the cases that
generate NFS4ERR_OLDSTATEID in the server. (It
is already disabled for Read/Write/Setattr of size unless you tweak
a variable.)

Please let me know if it helps, rick

[-- Attachment #2 --]
--- nfs_nfsdstate.c.sav	2010-09-03 19:35:44.000000000 -0400
+++ nfs_nfsdstate.c	2010-09-03 19:40:40.000000000 -0400
@@ -2873,9 +2873,11 @@
 	if (!error)
 		error = nfsrv_checkseqid(nd, new_stp->ls_seq,
 		    stp->ls_openowner, new_stp->ls_op);
+#ifdef notnow
 	if (!error && stp->ls_stateid.seqid != new_stp->ls_stateid.seqid &&
 	    !(new_stp->ls_flags & NFSLCK_CONFIRM))
 		error = NFSERR_OLDSTATEID;
+#endif
 	if (!error && vnode_vtype(vp) != VREG) {
 		if (vnode_vtype(vp) == VDIR)
 			error = NFSERR_ISDIR;

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