diff options
Diffstat (limited to 'fs/ext4/xattr.c')
| -rw-r--r-- | fs/ext4/xattr.c | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index c757adc9725..93a00d89a22 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c @@ -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;  |