aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2013-06-04 14:44:36 -0400
committerTheodore Ts'o <tytso@mit.edu>2013-06-04 14:44:36 -0400
commitc724585b62411f7abdea5b1054b9f1e1e7c964be (patch)
tree9221ab1390c4d5f47d7eb62fce49b6beb1b82e81 /fs/ext4
parent38b8ff7db4d99ebfabaee81b8747877424d1cf28 (diff)
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>
Diffstat (limited to 'fs/ext4')
-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)
1998 1998
1999/* fsync.c */ 1999/* fsync.c */
2000extern int ext4_sync_file(struct file *, loff_t, loff_t, int); 2000extern int ext4_sync_file(struct file *, loff_t, loff_t, int);
2001extern int ext4_flush_unwritten_io(struct inode *);
2002 2001
2003/* hash.c */ 2002/* hash.c */
2004extern int ext4fs_dirhash(const char *name, int len, struct 2003extern 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)
3522 3522
3523 /* Wait all existing dio workers, newcomers will block on i_mutex */ 3523 /* Wait all existing dio workers, newcomers will block on i_mutex */
3524 ext4_inode_block_unlocked_dio(inode); 3524 ext4_inode_block_unlocked_dio(inode);
3525 ret = ext4_flush_unwritten_io(inode);
3526 if (ret)
3527 goto out_dio;
3528 inode_dio_wait(inode); 3525 inode_dio_wait(inode);
3529 3526
3530 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) 3527 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)
281 ext4_do_flush_completed_IO(&ei->vfs_inode, &ei->i_unrsv_conversion_list); 281 ext4_do_flush_completed_IO(&ei->vfs_inode, &ei->i_unrsv_conversion_list);
282} 282}
283 283
284int ext4_flush_unwritten_io(struct inode *inode)
285{
286 int ret, err;
287
288 WARN_ON_ONCE(!mutex_is_locked(&inode->i_mutex) &&
289 !(inode->i_state & I_FREEING));
290 ret = ext4_do_flush_completed_IO(inode,
291 &EXT4_I(inode)->i_rsv_conversion_list);
292 err = ext4_do_flush_completed_IO(inode,
293 &EXT4_I(inode)->i_unrsv_conversion_list);
294 if (!ret)
295 ret = err;
296 ext4_unwritten_wait(inode);
297 return ret;
298}
299
300ext4_io_end_t *ext4_init_io_end(struct inode *inode, gfp_t flags) 284ext4_io_end_t *ext4_init_io_end(struct inode *inode, gfp_t flags)
301{ 285{
302 ext4_io_end_t *io = kmem_cache_zalloc(io_end_cachep, flags); 286 ext4_io_end_t *io = kmem_cache_zalloc(io_end_cachep, flags);