From f328acd7bb527de73e7cda6663bb6390b537f5e7 Mon Sep 17 00:00:00 2001 From: "Aneesh Kumar K.V" Date: Thu, 14 May 2009 17:05:39 -0400 Subject: [PATCH] --- yaml --- r: 145014 b: refs/heads/master c: 2a8964d63d50dd2d65d71d342bc7fb6ef4117614 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/ext4/inode.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 20a5d8a144f0..afb1d54455dc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 33b9817e2ae097c7b8d256e3510ac6c54fc6d9d0 +refs/heads/master: 2a8964d63d50dd2d65d71d342bc7fb6ef4117614 diff --git a/trunk/fs/ext4/inode.c b/trunk/fs/ext4/inode.c index 0ac31a06422b..2a9ffd528dd1 100644 --- a/trunk/fs/ext4/inode.c +++ b/trunk/fs/ext4/inode.c @@ -1149,6 +1149,7 @@ int ext4_get_blocks_wrap(handle_t *handle, struct inode *inode, sector_t block, int retval; clear_buffer_mapped(bh); + clear_buffer_unwritten(bh); /* * Try to see if we can get the block without requesting @@ -1178,6 +1179,18 @@ int ext4_get_blocks_wrap(handle_t *handle, struct inode *inode, sector_t block, if (retval > 0 && buffer_mapped(bh)) return retval; + /* + * When we call get_blocks without the create flag, the + * BH_Unwritten flag could have gotten set if the blocks + * requested were part of a uninitialized extent. We need to + * clear this flag now that we are committed to convert all or + * part of the uninitialized extent to be an initialized + * extent. This is because we need to avoid the combination + * of BH_Unwritten and BH_Mapped flags being simultaneously + * set on the buffer_head. + */ + clear_buffer_unwritten(bh); + /* * New blocks allocate and/or writing to uninitialized extent * will possibly result in updating i_data, so we take