You've probably noticed it: some of the oopses were related to amd
umounting some file system, which then would case a negative d_count
on some totally unrelated dentry.
Also, there was the report of ext2 inodes surviving an umount and
suddenly re-appearing on another file system.
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
So if the superblock is recycled, and the inode was not put with
i_nlink==0, it may get recycled by the wrong file system. All kinds
of strange things can happen.
I hope I'm missing something.
Regards,
Martin