Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Mar 2010 23:27:13 -0400 (EDT)
From:      Rick Macklem <rmacklem@uoguelph.ca>
To:        Steve Polyack <korvus@comcast.net>
Cc:        freebsd-fs@freebsd.org, bseklecki@noc.cfi.pgh.pa.us, User Questions <freebsd-questions@freebsd.org>, John Baldwin <jhb@freebsd.org>
Subject:   Re: FreeBSD NFS client goes into infinite retry loop
Message-ID:  <Pine.GSO.4.63.1003192322420.6295@muncher.cs.uoguelph.ca>
In-Reply-To: <4BA432C8.4040707@comcast.net>
References:  <4BA3613F.4070606@comcast.net> <201003190831.00950.jhb@freebsd.org> <4BA37AE9.4060806@comcast.net> <4BA392B1.4050107@comcast.net> <4BA3DEBC.2000608@comcast.net> <Pine.GSO.4.63.1003192120470.17841@muncher.cs.uoguelph.ca> <4BA432C8.4040707@comcast.net>

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


On Fri, 19 Mar 2010, Steve Polyack wrote:

[good stuff snipped]
>
> This makes sense.  According to wireshark, the server is indeed transmitting 
> "Status: NFS3ERR_IO (5)".  Perhaps this should be STALE instead; it sounds 
> more correct than marking it a general IO error.  Also, the NFS server is 
> serving its share off of a ZFS filesystem, if it makes any difference.  I 
> suppose ZFS could be talking to the NFS server threads with some mismatched 
> language, but I doubt it.
>
Ok, now I think we're making progress. If VFS_FHTOVP() doesn't return
ESTALE when the file no longer exists, the NFS server returns whatever
error it has returned.

So, either VFS_FHTOVP() succeeds after the file has been deleted, which
would be a problem that needs to be fixed within ZFS
OR
ZFS returns an error other than ESTALE when it doesn't exist.

Try the following patch on the server (which just makes any error
returned by VFS_FHTOVP() into ESTALE) and see if that helps.

--- nfsserver/nfs_srvsubs.c.sav	2010-03-19 22:06:43.000000000 -0400
+++ nfsserver/nfs_srvsubs.c	2010-03-19 22:07:22.000000000 -0400
@@ -1127,6 +1127,8 @@
  		}
  	}
  	error = VFS_FHTOVP(mp, &fhp->fh_fid, vpp);
+	if (error != 0)
+		error = ESTALE;
  	vfs_unbusy(mp);
  	if (error)
  		goto out;

Please let me know if the patch helps, rick




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.63.1003192322420.6295>