summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2013-06-04 20:44:36 +0200
committerTheodore Ts'o <tytso@mit.edu>2013-06-04 20:44:36 +0200
commitc724585b62411f7abdea5b1054b9f1e1e7c964be (patch)
tree9221ab1390c4d5f47d7eb62fce49b6beb1b82e81
parentext4: Remove wait for unwritten extents in ext4_ind_direct_IO() (diff)
downloadlinux-c724585b62411f7abdea5b1054b9f1e1e7c964be.tar.xz
linux-c724585b62411f7abdea5b1054b9f1e1e7c964be.zip
ext4: don't wait for extent conversion in ext4_punch_hole()
We don't have to wait for extent conversion in ext4_punch_hole() as buffered IO for the punched range has been flushed and waited upon (thus all extent conversions for that range have completed). Also we wait for all DIO to finish using inode_dio_wait() so there cannot be any extent conversions pending due to direct IO. Also remove ext4_flush_unwritten_io() since it's unused now. Reviewed-by: Zheng Liu <wenqing.lz@taobao.com> Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-rw-r--r--fs/ext4/ext4.h1
-rw-r--r--fs/ext4/inode.c3
-rw-r--r--fs/ext4/page-io.c16
3 files changed, 0 insertions, 20 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 74db579bb482..be95c83f5875 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -1998,7 +1998,6 @@ static inline unsigned char get_dtype(struct super_block *sb, int filetype)
/* fsync.c */
extern int ext4_sync_file(struct file *, loff_t, loff_t, int);
-extern int ext4_flush_unwritten_io(struct inode *);
/* hash.c */
extern int ext4fs_dirhash(const char *name, int len, struct
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index d6e4f0e09a8c..de6dd77f0c56 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -3522,9 +3522,6 @@ int ext4_punch_hole(struct file *file, loff_t offset, loff_t length)
/* Wait all existing dio workers, newcomers will block on i_mutex */
ext4_inode_block_unlocked_dio(inode);
- ret = ext4_flush_unwritten_io(inode);
- if (ret)
- goto out_dio;
inode_dio_wait(inode);
if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index 0f65561ab5a5..6ee5bd389405 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -281,22 +281,6 @@ void ext4_end_io_unrsv_work(struct work_struct *work)
ext4_do_flush_completed_IO(&ei->vfs_inode, &ei->i_unrsv_conversion_list);
}
-int ext4_flush_unwritten_io(struct inode *inode)
-{
- int ret, err;
-
- WARN_ON_ONCE(!mutex_is_locked(&inode->i_mutex) &&
- !(inode->i_state & I_FREEING));
- ret = ext4_do_flush_completed_IO(inode,
- &EXT4_I(inode)->i_rsv_conversion_list);
- err = ext4_do_flush_completed_IO(inode,
- &EXT4_I(inode)->i_unrsv_conversion_list);
- if (!ret)
- ret = err;
- ext4_unwritten_wait(inode);
- return ret;
-}
-
ext4_io_end_t *ext4_init_io_end(struct inode *inode, gfp_t flags)
{
ext4_io_end_t *io = kmem_cache_zalloc(io_end_cachep, flags);