aboutsummaryrefslogtreecommitdiffstats
path: root/fs/quota/dquot.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/quota/dquot.c')
-rw-r--r--fs/quota/dquot.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
index eb938015bd91..2ca967a5ef77 100644
--- a/fs/quota/dquot.c
+++ b/fs/quota/dquot.c
@@ -823,12 +823,12 @@ static void add_dquot_ref(struct super_block *sb, int type)
823 823
824 spin_lock(&inode_lock); 824 spin_lock(&inode_lock);
825 list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { 825 list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
826 if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW))
827 continue;
826 if (!atomic_read(&inode->i_writecount)) 828 if (!atomic_read(&inode->i_writecount))
827 continue; 829 continue;
828 if (!dqinit_needed(inode, type)) 830 if (!dqinit_needed(inode, type))
829 continue; 831 continue;
830 if (inode->i_state & (I_FREEING|I_WILL_FREE))
831 continue;
832 832
833 __iget(inode); 833 __iget(inode);
834 spin_unlock(&inode_lock); 834 spin_unlock(&inode_lock);
@@ -915,6 +915,12 @@ static void remove_dquot_ref(struct super_block *sb, int type,
915 915
916 spin_lock(&inode_lock); 916 spin_lock(&inode_lock);
917 list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { 917 list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
918 /*
919 * We have to scan also I_NEW inodes because they can already
920 * have quota pointer initialized. Luckily, we need to touch
921 * only quota pointers and these have separate locking
922 * (dqptr_sem).
923 */
918 if (!IS_NOQUOTA(inode)) 924 if (!IS_NOQUOTA(inode))
919 remove_inode_dquot_ref(inode, type, tofree_head); 925 remove_inode_dquot_ref(inode, type, tofree_head);
920 } 926 }