Take dirtying the inode to callers of ext2_free_blocks()
Al Viro [Wed, 21 Jul 2010 21:19:42 +0000 (01:19 +0400)]
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

fs/ext2/balloc.c
fs/ext2/inode.c
fs/ext2/xattr.c

index db69c12..c6c684b 100644 (file)
@@ -572,7 +572,6 @@ error_return:
        brelse(bitmap_bh);
        release_blocks(sb, freed);
        dquot_free_block_nodirty(inode, freed);
-       mark_inode_dirty(inode);
 }
 
 /**
index 069620b..e8af26d 100644 (file)
@@ -423,6 +423,8 @@ static int ext2_alloc_blocks(struct inode *inode,
 failed_out:
        for (i = 0; i <index; i++)
                ext2_free_blocks(inode, new_blocks[i], 1);
+       if (index)
+               mark_inode_dirty(inode);
        return ret;
 }
 
@@ -993,8 +995,8 @@ static inline void ext2_free_data(struct inode *inode, __le32 *p, __le32 *q)
                        else if (block_to_free == nr - count)
                                count++;
                        else {
-                               mark_inode_dirty(inode);
                                ext2_free_blocks (inode, block_to_free, count);
+                               mark_inode_dirty(inode);
                        free_this:
                                block_to_free = nr;
                                count = 1;
@@ -1002,8 +1004,8 @@ static inline void ext2_free_data(struct inode *inode, __le32 *p, __le32 *q)
                }
        }
        if (count > 0) {
-               mark_inode_dirty(inode);
                ext2_free_blocks (inode, block_to_free, count);
+               mark_inode_dirty(inode);
        }
 }
 
index 0fa24e8..25ff041 100644 (file)
@@ -674,6 +674,7 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
                        new_bh = sb_getblk(sb, block);
                        if (!new_bh) {
                                ext2_free_blocks(inode, block, 1);
+                               mark_inode_dirty(inode);
                                error = -EIO;
                                goto cleanup;
                        }
@@ -729,6 +730,7 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
                                mb_cache_entry_free(ce);
                        ea_bdebug(old_bh, "freeing");
                        ext2_free_blocks(inode, old_bh->b_blocknr, 1);
+                       mark_inode_dirty(inode);
                        /* We let our caller release old_bh, so we
                         * need to duplicate the buffer before. */
                        get_bh(old_bh);
@@ -789,6 +791,7 @@ ext2_xattr_delete_inode(struct inode *inode)
                if (ce)
                        mb_cache_entry_free(ce);
                ext2_free_blocks(inode, EXT2_I(inode)->i_file_acl, 1);
+               mark_inode_dirty(inode);
                get_bh(bh);
                bforget(bh);
                unlock_buffer(bh);