>    Look up a bit in the code.  If bigenough is not true, cnp does not 
>    get initialized.  This could lead to the bogus length -- or rather,
>    it would be the cnp that is bogus, not the 'len'.
>
>    The question is how to fix it.  I think we can safely avoid doing the
>    cache_enter so try changing the 'if (doit)' to 'if (doit && bigenough)'.
>    I've included the patch below.
...
>    In order to accomplish this, the underlying vnode representing each
>    directory entry is retrieved and locked.  However, there is a special
>    case:  We *already* have a reference on the directory vnode itself,
>    and one of the directory entries, ".", will be the same vnode.  Our
>    reference vnode, vp is *NOT* locked.  In fact, we *can't* lock it
>    without creating a potential deadlock situation (at least that is my
>    take).

   I good bit of detective work...excellent job.

-DG

David Greenman
Co-founder/Principal Architect, The FreeBSD Project - http://www.freebsd.org
Creator of high-performance Internet servers - http://www.terasolutions.com



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to