026b142488
If the entry is found in name cache, cache_lookup() does all the necessary locking now, simplifying the interface and making the code easier to follow and maintain. The code now also removes the entry from cache when it's either invalid (vget() fails) or the vnode has been recycled while waiting for the lock. In that case, unlock/relock of the directory vnode has been eliminated too. Both changes could lead to sligh performace improvement in same cases. Furthermore, obscure bug has been found and eliminated for ISDOTDOT in the lockparent && ISLASTCN case: if the vget() succeded and the re-lock of the directory vnode not, we returned the error with the '..' vnode still locked. For simplicity, cache_lookup() now returns 0 if the positive entry was found in cache, -1 if not found and ENOENT or error returned by the locking functions in any other case. Many thanks to Bill Studenmund and especially Charles Hannum for invaluable advices and code to get this right. Tested by: jdolecek Rewieved by: wrstuden, mycroft |
||
---|---|---|
bin | ||
distrib | ||
etc | ||
games | ||
gnu | ||
include | ||
lib | ||
libexec | ||
regress | ||
sbin | ||
share | ||
sys | ||
usr.bin | ||
usr.sbin | ||
Makefile |