diff options
Diffstat (limited to 'fs/inode.c')
-rw-r--r-- | fs/inode.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/fs/inode.c b/fs/inode.c index b33ba8e021cc..bf7a8b3ab937 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
@@ -773,15 +773,11 @@ static struct inode *find_inode(struct super_block *sb, | |||
773 | 773 | ||
774 | repeat: | 774 | repeat: |
775 | hlist_for_each_entry(inode, head, i_hash) { | 775 | hlist_for_each_entry(inode, head, i_hash) { |
776 | spin_lock(&inode->i_lock); | 776 | if (inode->i_sb != sb) |
777 | if (inode->i_sb != sb) { | ||
778 | spin_unlock(&inode->i_lock); | ||
779 | continue; | 777 | continue; |
780 | } | 778 | if (!test(inode, data)) |
781 | if (!test(inode, data)) { | ||
782 | spin_unlock(&inode->i_lock); | ||
783 | continue; | 779 | continue; |
784 | } | 780 | spin_lock(&inode->i_lock); |
785 | if (inode->i_state & (I_FREEING|I_WILL_FREE)) { | 781 | if (inode->i_state & (I_FREEING|I_WILL_FREE)) { |
786 | __wait_on_freeing_inode(inode); | 782 | __wait_on_freeing_inode(inode); |
787 | goto repeat; | 783 | goto repeat; |
@@ -804,15 +800,11 @@ static struct inode *find_inode_fast(struct super_block *sb, | |||
804 | 800 | ||
805 | repeat: | 801 | repeat: |
806 | hlist_for_each_entry(inode, head, i_hash) { | 802 | hlist_for_each_entry(inode, head, i_hash) { |
807 | spin_lock(&inode->i_lock); | 803 | if (inode->i_ino != ino) |
808 | if (inode->i_ino != ino) { | ||
809 | spin_unlock(&inode->i_lock); | ||
810 | continue; | 804 | continue; |
811 | } | 805 | if (inode->i_sb != sb) |
812 | if (inode->i_sb != sb) { | ||
813 | spin_unlock(&inode->i_lock); | ||
814 | continue; | 806 | continue; |
815 | } | 807 | spin_lock(&inode->i_lock); |
816 | if (inode->i_state & (I_FREEING|I_WILL_FREE)) { | 808 | if (inode->i_state & (I_FREEING|I_WILL_FREE)) { |
817 | __wait_on_freeing_inode(inode); | 809 | __wait_on_freeing_inode(inode); |
818 | goto repeat; | 810 | goto repeat; |