Locking and interoperability rules:

There are multiple threads.  All relevant data structures are
protected by mutexes.z

----

iput -- decrement refs and unlock
iget -- get inode by i number, add ref *not locked*

ilock -- lock
iunlock -- unlock

iref -- add ref	(must be locked)
irele -- remove ref (must be locked)


Various calls require locked nodes.  Those which return new nodes from
out of nowhere return them locked, with one additional reference (as
by iget).  No calls automatically unlock nodes but iput and UNLOCK.

One exception to the preceding: checkpath unlocks the parent inode.


Fields which never change can be referenced without a lock: i_number
of an inode, ip of a peropen, etc.

