While looking over the filesystem snapshot code from FreeBSD I discovered a
somewhat strange behaviour of namei():
If called for a DOT directory ("." or "...path/.") it returns with
nd.ni_dvp == nd.ni_vp
Even if called with LOCKPARENT flag both (identical) vnodes are not locked.
This leads to a bunch of code like
if (nd.ni_dvp == nd.ni_vp)
vrele(nd.ni_dvp);
else
vput(nd.ni_dvp);
Is there a reason why the parent directory (nd.ni_dvp) is returned unlocked?
If the parent directory was locked this code would become as simple as
vput(nd.ni_dvp);
--
Juergen Hannken-Illjes - hannken@eis.cs.tu-bs.de - TU Braunschweig (Germany)