diff options
-rw-r--r-- | fs/ext4/ext4.h | 1 | ||||
-rw-r--r-- | fs/ext4/extents.c | 6 | ||||
-rw-r--r-- | fs/ext4/fsync.c | 4 |
3 files changed, 9 insertions, 2 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 32b7daa41a42..bab2387fba43 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -1671,6 +1671,7 @@ extern void ext4_htree_free_dir_info(struct dir_private_info *p); | |||
1671 | 1671 | ||
1672 | /* fsync.c */ | 1672 | /* fsync.c */ |
1673 | extern int ext4_sync_file(struct file *, int); | 1673 | extern int ext4_sync_file(struct file *, int); |
1674 | extern int ext4_flush_completed_IO(struct inode *); | ||
1674 | 1675 | ||
1675 | /* hash.c */ | 1676 | /* hash.c */ |
1676 | extern int ext4fs_dirhash(const char *name, int len, struct | 1677 | extern int ext4fs_dirhash(const char *name, int len, struct |
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 9081d1060a5f..627f7ae94ae5 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c | |||
@@ -3534,6 +3534,12 @@ void ext4_ext_truncate(struct inode *inode) | |||
3534 | int err = 0; | 3534 | int err = 0; |
3535 | 3535 | ||
3536 | /* | 3536 | /* |
3537 | * finish any pending end_io work so we won't run the risk of | ||
3538 | * converting any truncated blocks to initialized later | ||
3539 | */ | ||
3540 | ext4_flush_completed_IO(inode); | ||
3541 | |||
3542 | /* | ||
3537 | * probably first extent we're gonna free will be last in block | 3543 | * probably first extent we're gonna free will be last in block |
3538 | */ | 3544 | */ |
3539 | err = ext4_writepage_trans_blocks(inode); | 3545 | err = ext4_writepage_trans_blocks(inode); |
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c index c1a7bc923cf6..7829b287822a 100644 --- a/fs/ext4/fsync.c +++ b/fs/ext4/fsync.c | |||
@@ -75,7 +75,7 @@ static void dump_completed_IO(struct inode * inode) | |||
75 | * to written. | 75 | * to written. |
76 | * The function return the number of pending IOs on success. | 76 | * The function return the number of pending IOs on success. |
77 | */ | 77 | */ |
78 | static int flush_completed_IO(struct inode *inode) | 78 | extern int ext4_flush_completed_IO(struct inode *inode) |
79 | { | 79 | { |
80 | ext4_io_end_t *io; | 80 | ext4_io_end_t *io; |
81 | struct ext4_inode_info *ei = EXT4_I(inode); | 81 | struct ext4_inode_info *ei = EXT4_I(inode); |
@@ -169,7 +169,7 @@ int ext4_sync_file(struct file *file, int datasync) | |||
169 | if (inode->i_sb->s_flags & MS_RDONLY) | 169 | if (inode->i_sb->s_flags & MS_RDONLY) |
170 | return 0; | 170 | return 0; |
171 | 171 | ||
172 | ret = flush_completed_IO(inode); | 172 | ret = ext4_flush_completed_IO(inode); |
173 | if (ret < 0) | 173 | if (ret < 0) |
174 | return ret; | 174 | return ret; |
175 | 175 | ||