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>
