]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/ext2/xattr.c
fat: ->i_pos race fix
[linux-2.6-omap-h63xx.git] / fs / ext2 / xattr.c
index a99d46f3b26eb032e13c5a3d9f26484518997b5c..987a5261cc2e8ef8a2e164c4f491b37856f14be3 100644 (file)
@@ -646,8 +646,7 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
                                        unlock_buffer(new_bh);
                                        goto cleanup;
                                }
-                               HDR(new_bh)->h_refcount = cpu_to_le32(1 +
-                                       le32_to_cpu(HDR(new_bh)->h_refcount));
+                               le32_add_cpu(&HDR(new_bh)->h_refcount, 1);
                                ea_bdebug(new_bh, "refcount now=%d",
                                        le32_to_cpu(HDR(new_bh)->h_refcount));
                        }
@@ -660,10 +659,8 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
                        ext2_xattr_cache_insert(new_bh);
                } else {
                        /* We need to allocate a new block */
-                       int goal = le32_to_cpu(EXT2_SB(sb)->s_es->
-                                                          s_first_data_block) +
-                                  EXT2_I(inode)->i_block_group *
-                                  EXT2_BLOCKS_PER_GROUP(sb);
+                       ext2_fsblk_t goal = ext2_group_first_block_no(sb,
+                                               EXT2_I(inode)->i_block_group);
                        int block = ext2_new_block(inode, goal, &error);
                        if (error)
                                goto cleanup;
@@ -731,8 +728,7 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
                        bforget(old_bh);
                } else {
                        /* Decrement the refcount only. */
-                       HDR(old_bh)->h_refcount = cpu_to_le32(
-                               le32_to_cpu(HDR(old_bh)->h_refcount) - 1);
+                       le32_add_cpu(&HDR(old_bh)->h_refcount, -1);
                        if (ce)
                                mb_cache_entry_release(ce);
                        DQUOT_FREE_BLOCK(inode, 1);
@@ -789,8 +785,7 @@ ext2_xattr_delete_inode(struct inode *inode)
                bforget(bh);
                unlock_buffer(bh);
        } else {
-               HDR(bh)->h_refcount = cpu_to_le32(
-                       le32_to_cpu(HDR(bh)->h_refcount) - 1);
+               le32_add_cpu(&HDR(bh)->h_refcount, -1);
                if (ce)
                        mb_cache_entry_release(ce);
                ea_bdebug(bh, "refcount now=%d",