find_inode_nowait (9) - Linux Manuals
find_inode_nowait: find an inode in the inode cache
find_inode_nowait - find an inode in the inode cache
struct inode * find_inode_nowait(struct super_block
* sb, unsigned long hashval, int (*match) (struct inode *, unsigned long, void *), void * data);
- super block of file system to search
- hash value (usually inode number) to search for
- callback used for comparisons between inodes
- opaque data pointer to pass to match
Search for the inode specified by hashval and data in the inode cache, where the helper function match will return 0 if the inode does not match, 1 if the inode does match, and -1 if the search should be stopped. The match function must be responsible for taking the i_lock spin_lock and checking i_state for an inode being freed or being initialized, and incrementing the reference count before returning 1. It also must not sleep, since it is called with the inode_hash_lock spinlock held.
This is a even more generalized version of ilookup5 when the function must never block --- find_inode can block in __wait_on_freeing_inode --- or when the caller can not increment the reference count because the resulting iput might cause an inode eviction. The tradeoff is that the match funtion must be very carefully implemented.