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) ; |
struct super_block * sb
super block of file system to search
unsigned long hashval
hash value (usually inode number) to search for
int (*)(struct inode *, unsigned long, void *) match
callback used for comparisons between inodes
void * data
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.