]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/ext4/xattr.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc
[karo-tx-linux.git] / fs / ext4 / xattr.c
index c757adc972506d672c78b7de03e654ede7eb8b1e..93a00d89a220d4085c64e9d427c375e9ada76494 100644 (file)
@@ -820,8 +820,14 @@ inserted:
                        if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)))
                                goal = goal & EXT4_MAX_BLOCK_FILE_PHYS;
 
+                       /*
+                        * take i_data_sem because we will test
+                        * i_delalloc_reserved_flag in ext4_mb_new_blocks
+                        */
+                       down_read((&EXT4_I(inode)->i_data_sem));
                        block = ext4_new_meta_blocks(handle, inode, goal, 0,
                                                     NULL, &error);
+                       up_read((&EXT4_I(inode)->i_data_sem));
                        if (error)
                                goto cleanup;
 
@@ -985,11 +991,7 @@ ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index,
        no_expand = ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND);
        ext4_set_inode_state(inode, EXT4_STATE_NO_EXPAND);
 
-       error = ext4_get_inode_loc(inode, &is.iloc);
-       if (error)
-               goto cleanup;
-
-       error = ext4_journal_get_write_access(handle, is.iloc.bh);
+       error = ext4_reserve_inode_write(handle, inode, &is.iloc);
        if (error)
                goto cleanup;