aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>2008-02-22 06:17:31 -0500
committerTheodore Ts'o <tytso@mit.edu>2008-02-22 06:17:31 -0500
commit9df5643ad135c7f8c02d3b69020de4ec910f9fc0 (patch)
tree8b2c72c0df0bbb6af41ee9c68e91c93c5ab26a78
parentb35905c16ad6428551eb9e49525011bd2700cf56 (diff)
ext4: Get journal write access before modifying the extent tree
When the user was writing into an unitialized extent, ext4_ext_convert_to_initialize() was not requesting journal write access before it started to modify the extent tree. Fix this oversight. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Mingming Cao <cmm@us.ibm.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-rw-r--r--fs/ext4/extents.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 995ac16102a9..c4d6f19faf37 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -2168,6 +2168,10 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
2168 newblock = iblock - ee_block + ext_pblock(ex); 2168 newblock = iblock - ee_block + ext_pblock(ex);
2169 ex2 = ex; 2169 ex2 = ex;
2170 2170
2171 err = ext4_ext_get_access(handle, inode, path + depth);
2172 if (err)
2173 goto out;
2174
2171 /* ex1: ee_block to iblock - 1 : uninitialized */ 2175 /* ex1: ee_block to iblock - 1 : uninitialized */
2172 if (iblock > ee_block) { 2176 if (iblock > ee_block) {
2173 ex1 = ex; 2177 ex1 = ex;
@@ -2210,6 +2214,10 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
2210 ex = path[depth].p_ext; 2214 ex = path[depth].p_ext;
2211 if (ex2 != &newex) 2215 if (ex2 != &newex)
2212 ex2 = ex; 2216 ex2 = ex;
2217
2218 err = ext4_ext_get_access(handle, inode, path + depth);
2219 if (err)
2220 goto out;
2213 } 2221 }
2214 allocated = max_blocks; 2222 allocated = max_blocks;
2215 } 2223 }
@@ -2230,9 +2238,6 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
2230 ex2->ee_len = cpu_to_le16(allocated); 2238 ex2->ee_len = cpu_to_le16(allocated);
2231 if (ex2 != ex) 2239 if (ex2 != ex)
2232 goto insert; 2240 goto insert;
2233 err = ext4_ext_get_access(handle, inode, path + depth);
2234 if (err)
2235 goto out;
2236 /* 2241 /*
2237 * New (initialized) extent starts from the first block 2242 * New (initialized) extent starts from the first block
2238 * in the current extent. i.e., ex2 == ex 2243 * in the current extent. i.e., ex2 == ex