ext4: don't wait for extent conversion in ext4_punch_hole()
authorJan Kara <jack@suse.cz>
Tue, 4 Jun 2013 18:44:36 +0000 (14:44 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 4 Jun 2013 18:44:36 +0000 (14:44 -0400)
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>
fs/ext4/ext4.h
fs/ext4/inode.c
fs/ext4/page-io.c

index 74db579bb4825bc11929d9b667e1db6cd79abc62..be95c83f5875d657dddd7183b23edaa85ba94b36 100644 (file)
@@ -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
index d6e4f0e09a8cc071e1f2b54b9f15b2b80c912955..de6dd77f0c569797dc9eed56fb257b07c6ee4242 100644 (file)
@@ -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))
index 0f65561ab5a5c63750cf33099a90bd3d7b6bf135..6ee5bd389405c7faf540c5780fa97f71498553d7 100644 (file)
@@ -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);