Date: Thu, 7 Mar 1996 02:42:16 +1100 From: Bruce Evans <bde@zeta.org.au> To: bde@zeta.org.au, davidg@Root.COM Cc: freebsd-current@FreeBSD.ORG, jhay@mikom.csir.co.za Subject: Re: fixes for rename panic (round 1) Message-ID: <199603061542.CAA27656@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
>>***************
>>*** 953,958 ****
>>--- 1005,1012 ----
>> panic("ufs_rename: lost to startdir");
>> error = relookup(tdvp, &tvp, tcnp);
>>+ VREF(tdvp);
>> if (error)
>> goto out;
>>+ vrele(tdvp);
>> dp = VTOI(tdvp);
>> xp = NULL;
> It seems like this hunk should be similar to the others - the VREF() should
>be before the call to relookup(). Right?
Right. The above will probably work because the reference count is > 0
because rename() holds a reference to ni_startdir, so there is no danger
of the reference count going from 0 to -1 in the vput() in relookup(). For
the same reason, it should work to only add a reference after an error:
relookup() = ...
if (error) {
VREF(tdvp);
goto out;
}
but it seems clearer to use a VREF() for each vrele(), at least statically.
My tests only covered the following cases:
- first relookup() called, always succeeded.
- second relookup() never (?) called.
- third relookup() called, sometimes failed.
Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199603061542.CAA27656>
