FreeBSD 7.2 + NFS + nullfs + unlink + fstat = Stale NFS File Handle

Linda Messerschmidt linda.messerschmidt at gmail.com
Wed Oct 28 13:48:49 UTC 2009


On Wed, Oct 28, 2009 at 8:48 AM, Andrey Simonenko
<simon at comsys.ntu-kpi.kiev.ua> wrote:
> As I understand when a file is opened in NULLFS its vnode gets new
> reference on 'count of users', but this new reference is not propagated
> to the lower vnode (vnode that is under NULLFS).  When a file is removed
> NULLFS passes this op to the lower FS (NFS in this example) and that
> FS sees that its vnode has only a single reference on 'count of users'.
>
> In case of NFS when there is a request to remove a vnode it checks that
> value of 'count of users' for this vnode.  If this count is equal to 1,
> then NFS client code does 'RPC remove'.  If this count is greater than 1
> (for example when a file is opened), then NFS client code renames pathname
> to .nfs-file, but does not send 'RPC remove' to the NFS server.

That sounds like a pretty reasonable explanation of what's going on.

Unfortunately it does sound like this would be tough to fix.  Since
NFS deletes are a special case, short of making an NFS-aware nullfs,
which seems silly, it sounds like the "solution" would be rewriting
nullfs to propagate the reference count.  I don't know enough about
nullfs to know exactly how hard that would be, but I'm guessing it's
not the work of a lazy afternoon. :-)

>>       if (!fd) {
>           ^^^^^ should be (fd < 0)

Oops, you are right!

Thanks very much!


More information about the freebsd-hackers mailing list