From 9ef47456e8d8aa4cabdba22d14d753c9aa53ea8d Mon Sep 17 00:00:00 2001 From: Jiaying Zhang Date: Mon, 10 Jan 2011 12:47:05 -0500 Subject: [PATCH] --- yaml --- r: 229133 b: refs/heads/master c: 3889fd57ea3c58209354862523275774fca9db03 h: refs/heads/master i: 229131: 468248739356bca84f83f0cc13b2e7ad75e2f0ab v: v3 --- [refs] | 2 +- trunk/fs/ext4/ext4.h | 1 + trunk/fs/ext4/extents.c | 6 ++++++ trunk/fs/ext4/fsync.c | 4 ++-- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 545c63914abc..5b2819542745 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b40971426a837e9dc9c66e1b6bbcb3874eafe4e0 +refs/heads/master: 3889fd57ea3c58209354862523275774fca9db03 diff --git a/trunk/fs/ext4/ext4.h b/trunk/fs/ext4/ext4.h index 32b7daa41a42..bab2387fba43 100644 --- a/trunk/fs/ext4/ext4.h +++ b/trunk/fs/ext4/ext4.h @@ -1671,6 +1671,7 @@ extern void ext4_htree_free_dir_info(struct dir_private_info *p); /* fsync.c */ extern int ext4_sync_file(struct file *, int); +extern int ext4_flush_completed_IO(struct inode *); /* hash.c */ extern int ext4fs_dirhash(const char *name, int len, struct diff --git a/trunk/fs/ext4/extents.c b/trunk/fs/ext4/extents.c index 9081d1060a5f..627f7ae94ae5 100644 --- a/trunk/fs/ext4/extents.c +++ b/trunk/fs/ext4/extents.c @@ -3533,6 +3533,12 @@ void ext4_ext_truncate(struct inode *inode) handle_t *handle; int err = 0; + /* + * finish any pending end_io work so we won't run the risk of + * converting any truncated blocks to initialized later + */ + ext4_flush_completed_IO(inode); + /* * probably first extent we're gonna free will be last in block */ diff --git a/trunk/fs/ext4/fsync.c b/trunk/fs/ext4/fsync.c index c1a7bc923cf6..7829b287822a 100644 --- a/trunk/fs/ext4/fsync.c +++ b/trunk/fs/ext4/fsync.c @@ -75,7 +75,7 @@ static void dump_completed_IO(struct inode * inode) * to written. * The function return the number of pending IOs on success. */ -static int flush_completed_IO(struct inode *inode) +extern int ext4_flush_completed_IO(struct inode *inode) { ext4_io_end_t *io; struct ext4_inode_info *ei = EXT4_I(inode); @@ -169,7 +169,7 @@ int ext4_sync_file(struct file *file, int datasync) if (inode->i_sb->s_flags & MS_RDONLY) return 0; - ret = flush_completed_IO(inode); + ret = ext4_flush_completed_IO(inode); if (ret < 0) return ret;