|
@@ -4796,7 +4796,6 @@ static long ext4_zero_range(struct file *file, loff_t offset,
|
|
|
flags |= EXT4_GET_BLOCKS_KEEP_SIZE;
|
|
|
|
|
|
/* Wait all existing dio workers, newcomers will block on i_mutex */
|
|
|
- ext4_inode_block_unlocked_dio(inode);
|
|
|
inode_dio_wait(inode);
|
|
|
|
|
|
/* Preallocate the range including the unaligned edges */
|
|
@@ -4807,7 +4806,7 @@ static long ext4_zero_range(struct file *file, loff_t offset,
|
|
|
round_down(offset, 1 << blkbits)) >> blkbits,
|
|
|
new_size, flags);
|
|
|
if (ret)
|
|
|
- goto out_dio;
|
|
|
+ goto out_mutex;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -4824,7 +4823,7 @@ static long ext4_zero_range(struct file *file, loff_t offset,
|
|
|
ret = ext4_update_disksize_before_punch(inode, offset, len);
|
|
|
if (ret) {
|
|
|
up_write(&EXT4_I(inode)->i_mmap_sem);
|
|
|
- goto out_dio;
|
|
|
+ goto out_mutex;
|
|
|
}
|
|
|
/* Now release the pages and zero block aligned part of pages */
|
|
|
truncate_pagecache_range(inode, start, end - 1);
|
|
@@ -4834,10 +4833,10 @@ static long ext4_zero_range(struct file *file, loff_t offset,
|
|
|
flags);
|
|
|
up_write(&EXT4_I(inode)->i_mmap_sem);
|
|
|
if (ret)
|
|
|
- goto out_dio;
|
|
|
+ goto out_mutex;
|
|
|
}
|
|
|
if (!partial_begin && !partial_end)
|
|
|
- goto out_dio;
|
|
|
+ goto out_mutex;
|
|
|
|
|
|
/*
|
|
|
* In worst case we have to writeout two nonadjacent unwritten
|
|
@@ -4850,7 +4849,7 @@ static long ext4_zero_range(struct file *file, loff_t offset,
|
|
|
if (IS_ERR(handle)) {
|
|
|
ret = PTR_ERR(handle);
|
|
|
ext4_std_error(inode->i_sb, ret);
|
|
|
- goto out_dio;
|
|
|
+ goto out_mutex;
|
|
|
}
|
|
|
|
|
|
inode->i_mtime = inode->i_ctime = current_time(inode);
|
|
@@ -4875,8 +4874,6 @@ static long ext4_zero_range(struct file *file, loff_t offset,
|
|
|
ext4_handle_sync(handle);
|
|
|
|
|
|
ext4_journal_stop(handle);
|
|
|
-out_dio:
|
|
|
- ext4_inode_resume_unlocked_dio(inode);
|
|
|
out_mutex:
|
|
|
inode_unlock(inode);
|
|
|
return ret;
|
|
@@ -4964,11 +4961,9 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
|
|
|
}
|
|
|
|
|
|
/* Wait all existing dio workers, newcomers will block on i_mutex */
|
|
|
- ext4_inode_block_unlocked_dio(inode);
|
|
|
inode_dio_wait(inode);
|
|
|
|
|
|
ret = ext4_alloc_file_blocks(file, lblk, max_blocks, new_size, flags);
|
|
|
- ext4_inode_resume_unlocked_dio(inode);
|
|
|
if (ret)
|
|
|
goto out;
|
|
|
|
|
@@ -5485,7 +5480,6 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
|
|
|
}
|
|
|
|
|
|
/* Wait for existing dio to complete */
|
|
|
- ext4_inode_block_unlocked_dio(inode);
|
|
|
inode_dio_wait(inode);
|
|
|
|
|
|
/*
|
|
@@ -5562,7 +5556,6 @@ out_stop:
|
|
|
ext4_journal_stop(handle);
|
|
|
out_mmap:
|
|
|
up_write(&EXT4_I(inode)->i_mmap_sem);
|
|
|
- ext4_inode_resume_unlocked_dio(inode);
|
|
|
out_mutex:
|
|
|
inode_unlock(inode);
|
|
|
return ret;
|
|
@@ -5635,7 +5628,6 @@ int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len)
|
|
|
}
|
|
|
|
|
|
/* Wait for existing dio to complete */
|
|
|
- ext4_inode_block_unlocked_dio(inode);
|
|
|
inode_dio_wait(inode);
|
|
|
|
|
|
/*
|
|
@@ -5737,7 +5729,6 @@ out_stop:
|
|
|
ext4_journal_stop(handle);
|
|
|
out_mmap:
|
|
|
up_write(&EXT4_I(inode)->i_mmap_sem);
|
|
|
- ext4_inode_resume_unlocked_dio(inode);
|
|
|
out_mutex:
|
|
|
inode_unlock(inode);
|
|
|
return ret;
|