Ext2: mark inode dirty after the function dquot_free_block_nodirty is called
authorWang Shilong <wangsl-fnst@cn.fujitsu.com>
Thu, 7 Feb 2013 14:57:53 +0000 (22:57 +0800)
committerJan Kara <jack@suse.cz>
Thu, 7 Feb 2013 15:44:55 +0000 (16:44 +0100)
We should mark inode dirty after the function dquot_free_block_nodirty
is called.Besides,add a check whether it is necessary to call
dquot_free_block_nodirty functon.

Signed-off-by: Wang Shilong <wangsl-fnst@cn.fujitsu.com>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/ext2/balloc.c

index ea88181932dfc9fe3678337d3992a02c9ebb9c36..132da4c0692f449b514bec5aea8db031ce00a443 100644 (file)
@@ -568,8 +568,11 @@ do_more:
        }
 error_return:
        brelse(bitmap_bh);
-       release_blocks(sb, freed);
-       dquot_free_block_nodirty(inode, freed);
+       if (freed) {
+               release_blocks(sb, freed);
+               dquot_free_block_nodirty(inode, freed);
+               mark_inode_dirty(inode);
+       }
 }
 
 /**
@@ -1412,9 +1415,11 @@ allocated:
 
        *errp = 0;
        brelse(bitmap_bh);
-       dquot_free_block_nodirty(inode, *count-num);
-       mark_inode_dirty(inode);
-       *count = num;
+       if (num < *count) {
+               dquot_free_block_nodirty(inode, *count-num);
+               mark_inode_dirty(inode);
+               *count = num;
+       }
        return ret_block;
 
 io_error: