kernel - Fix two rare namecache bugs
* Fix calculations which use the vfscache_negs global. This global
is somewhat heuristical and can values which are a bit off, including
0. Copy to a local and limit the range, fixing a divide-by-zero
bug and a negative-number handling bug.
* Fix a bug in the handling of a race in _cache_cleanneg(). We were
unlocking the ncp but failing to drop it, leaving it with a ref.
The accumulating namecache records prevent umount from succeeding.
This race can only occur regularly when kern.maxvnodes is set to
a low value.