iget5_locked — obtain an inode from a mounted file system


struct inode * iget5_locked (struct super_block * sb,
 unsigned long hashval,
 int (*test) (struct inode *, void *),
 int (*set) (struct inode *, void *),
 void * data);


struct super_block * sb

super block of file system

unsigned long hashval

hash value (usually inode number) to get

int (*)(struct inode *, void *) test

callback used for comparisons between inodes

int (*)(struct inode *, void *) set

callback used to initialize a new struct inode

void * data

opaque data pointer to pass to test and set


Search for the inode specified by hashval and data in the inode cache, and if present it is return it with an increased reference count. This is a generalized version of iget_locked for file systems where the inode number is not sufficient for unique identification of an inode.

If the inode is not in cache, allocate a new inode and return it locked, hashed, and with the I_NEW flag set. The file system gets to fill it in before unlocking it via unlock_new_inode.

Note both test and set are called with the inode_hash_lock held, so can't sleep.