Ahh, you're right.
> Something is wrong with unmounting. Here's a theory:
>
> - iput removes the inode from the hash list only if nlink is zero
> - iget, if the inode is not found, invokes get_new_inode
> - get_new_inode, under certain circumstances, searches the hash list
> - find_inode on the hash list searches for identical superblock and
> inode number
I just found it - when we're invalidating inodes at unmount time, we do
not invalidate any inode that has a non-zero "i_nrpages". But we really
REALLY should do that.
We do actually want to leave inodes with a non-zero i_nrpages alone under
normal circumstances, but unmounting is definitely not a normal
circumstance.
Linus