Merge branch 'intel_idle+snb' into idle-release
[pandora-kernel.git] / fs / ext2 / xattr.c
index 7c39157..8c29ae1 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;
                        }
@@ -703,8 +704,10 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
                 * written (only some dirty data were not) so we just proceed
                 * as if nothing happened and cleanup the unused block */
                if (error && error != -ENOSPC) {
-                       if (new_bh && new_bh != old_bh)
-                               dquot_free_block(inode, 1);
+                       if (new_bh && new_bh != old_bh) {
+                               dquot_free_block_nodirty(inode, 1);
+                               mark_inode_dirty(inode);
+                       }
                        goto cleanup;
                }
        } else
@@ -727,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);
@@ -736,7 +740,8 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
                        le32_add_cpu(&HDR(old_bh)->h_refcount, -1);
                        if (ce)
                                mb_cache_entry_release(ce);
-                       dquot_free_block(inode, 1);
+                       dquot_free_block_nodirty(inode, 1);
+                       mark_inode_dirty(inode);
                        mark_buffer_dirty(old_bh);
                        ea_bdebug(old_bh, "refcount now=%d",
                                le32_to_cpu(HDR(old_bh)->h_refcount));
@@ -799,7 +804,7 @@ ext2_xattr_delete_inode(struct inode *inode)
                mark_buffer_dirty(bh);
                if (IS_SYNC(inode))
                        sync_dirty_buffer(bh);
-               dquot_free_block(inode, 1);
+               dquot_free_block_nodirty(inode, 1);
        }
        EXT2_I(inode)->i_file_acl = 0;
 
@@ -838,7 +843,7 @@ ext2_xattr_cache_insert(struct buffer_head *bh)
        ce = mb_cache_entry_alloc(ext2_xattr_cache, GFP_NOFS);
        if (!ce)
                return -ENOMEM;
-       error = mb_cache_entry_insert(ce, bh->b_bdev, bh->b_blocknr, &hash);
+       error = mb_cache_entry_insert(ce, bh->b_bdev, bh->b_blocknr, hash);
        if (error) {
                mb_cache_entry_free(ce);
                if (error == -EBUSY) {
@@ -912,8 +917,8 @@ ext2_xattr_cache_find(struct inode *inode, struct ext2_xattr_header *header)
                return NULL;  /* never share */
        ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
 again:
-       ce = mb_cache_entry_find_first(ext2_xattr_cache, 0,
-                                      inode->i_sb->s_bdev, hash);
+       ce = mb_cache_entry_find_first(ext2_xattr_cache, inode->i_sb->s_bdev,
+                                      hash);
        while (ce) {
                struct buffer_head *bh;
 
@@ -945,7 +950,7 @@ again:
                        unlock_buffer(bh);
                        brelse(bh);
                }
-               ce = mb_cache_entry_find_next(ce, 0, inode->i_sb->s_bdev, hash);
+               ce = mb_cache_entry_find_next(ce, inode->i_sb->s_bdev, hash);
        }
        return NULL;
 }
@@ -1021,9 +1026,7 @@ static void ext2_xattr_rehash(struct ext2_xattr_header *header,
 int __init
 init_ext2_xattr(void)
 {
-       ext2_xattr_cache = mb_cache_create("ext2_xattr", NULL,
-               sizeof(struct mb_cache_entry) +
-               sizeof(((struct mb_cache_entry *) 0)->e_indexes[0]), 1, 6);
+       ext2_xattr_cache = mb_cache_create("ext2_xattr", 6);
        if (!ext2_xattr_cache)
                return -ENOMEM;
        return 0;