iget/iget5: don't bother with ->i_lock until we find a match
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
24
fs/inode.c
24
fs/inode.c
@ -773,15 +773,11 @@ static struct inode *find_inode(struct super_block *sb,
|
||||
|
||||
repeat:
|
||||
hlist_for_each_entry(inode, head, i_hash) {
|
||||
if (inode->i_sb != sb)
|
||||
continue;
|
||||
if (!test(inode, data))
|
||||
continue;
|
||||
spin_lock(&inode->i_lock);
|
||||
if (inode->i_sb != sb) {
|
||||
spin_unlock(&inode->i_lock);
|
||||
continue;
|
||||
}
|
||||
if (!test(inode, data)) {
|
||||
spin_unlock(&inode->i_lock);
|
||||
continue;
|
||||
}
|
||||
if (inode->i_state & (I_FREEING|I_WILL_FREE)) {
|
||||
__wait_on_freeing_inode(inode);
|
||||
goto repeat;
|
||||
@ -804,15 +800,11 @@ static struct inode *find_inode_fast(struct super_block *sb,
|
||||
|
||||
repeat:
|
||||
hlist_for_each_entry(inode, head, i_hash) {
|
||||
if (inode->i_ino != ino)
|
||||
continue;
|
||||
if (inode->i_sb != sb)
|
||||
continue;
|
||||
spin_lock(&inode->i_lock);
|
||||
if (inode->i_ino != ino) {
|
||||
spin_unlock(&inode->i_lock);
|
||||
continue;
|
||||
}
|
||||
if (inode->i_sb != sb) {
|
||||
spin_unlock(&inode->i_lock);
|
||||
continue;
|
||||
}
|
||||
if (inode->i_state & (I_FREEING|I_WILL_FREE)) {
|
||||
__wait_on_freeing_inode(inode);
|
||||
goto repeat;
|
||||
|
||||
Reference in New Issue
Block a user