diff options
Diffstat (limited to 'fs/ext4/migrate.c')
| -rw-r--r-- | fs/ext4/migrate.c | 11 | 
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c index a19a9661646e..d98ac2af8199 100644 --- a/fs/ext4/migrate.c +++ b/fs/ext4/migrate.c @@ -408,7 +408,6 @@ static int free_ext_block(handle_t *handle, struct inode *inode)  int ext4_ext_migrate(struct inode *inode)  { -	struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);  	handle_t *handle;  	int retval = 0, i;  	__le32 *i_data; @@ -418,6 +417,7 @@ int ext4_ext_migrate(struct inode *inode)  	unsigned long max_entries;  	__u32 goal, tmp_csum_seed;  	uid_t owner[2]; +	int alloc_ctx;  	/*  	 * If the filesystem does not support extents, or the inode @@ -434,7 +434,7 @@ int ext4_ext_migrate(struct inode *inode)  		 */  		return retval; -	percpu_down_write(&sbi->s_writepages_rwsem); +	alloc_ctx = ext4_writepages_down_write(inode->i_sb);  	/*  	 * Worst case we can touch the allocation bitmaps and a block @@ -586,7 +586,7 @@ out_tmp_inode:  	unlock_new_inode(tmp_inode);  	iput(tmp_inode);  out_unlock: -	percpu_up_write(&sbi->s_writepages_rwsem); +	ext4_writepages_up_write(inode->i_sb, alloc_ctx);  	return retval;  } @@ -605,6 +605,7 @@ int ext4_ind_migrate(struct inode *inode)  	ext4_fsblk_t			blk;  	handle_t			*handle;  	int				ret, ret2 = 0; +	int				alloc_ctx;  	if (!ext4_has_feature_extents(inode->i_sb) ||  	    (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) @@ -621,7 +622,7 @@ int ext4_ind_migrate(struct inode *inode)  	if (test_opt(inode->i_sb, DELALLOC))  		ext4_alloc_da_blocks(inode); -	percpu_down_write(&sbi->s_writepages_rwsem); +	alloc_ctx = ext4_writepages_down_write(inode->i_sb);  	handle = ext4_journal_start(inode, EXT4_HT_MIGRATE, 1);  	if (IS_ERR(handle)) { @@ -665,6 +666,6 @@ errout:  	ext4_journal_stop(handle);  	up_write(&EXT4_I(inode)->i_data_sem);  out_unlock: -	percpu_up_write(&sbi->s_writepages_rwsem); +	ext4_writepages_up_write(inode->i_sb, alloc_ctx);  	return ret;  }  | 
