diff options
author | Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 2008-02-22 06:17:31 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2008-02-22 06:17:31 -0500 |
commit | 9df5643ad135c7f8c02d3b69020de4ec910f9fc0 (patch) | |
tree | 8b2c72c0df0bbb6af41ee9c68e91c93c5ab26a78 /fs/ext4 | |
parent | b35905c16ad6428551eb9e49525011bd2700cf56 (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>
Diffstat (limited to 'fs/ext4')
-rw-r--r-- | fs/ext4/extents.c | 11 |
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 |