]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> |
2 | Date: Wed, 10 Jun 2009 18:22:55 +0000 (-0400) | |
3 | Subject: ext4: Avoid corrupting the uninitialized bit in the extent during truncate | |
4 | Patch-mainline: 2.6.31-rc1 | |
5 | Git-commit: a41f20716975910d9beb90b7efc61107901492b8 | |
6 | References: bnc#514265 | |
7 | ||
8 | ext4: Avoid corrupting the uninitialized bit in the extent during truncate | |
9 | ||
10 | The unitialized bit was not properly getting preserved in in an extent | |
11 | which is partially truncated because the it was geting set to the | |
12 | value of the first extent to be removed or truncated as part of the | |
13 | truncate operation, and if there are multiple extents are getting | |
14 | removed or modified as part of the truncate operation, it is only the | |
15 | last extent which will might be partially truncated, and its | |
16 | uninitalized bit is not necessarily the same as the first extent to be | |
17 | truncated. | |
18 | ||
19 | Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | |
20 | Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> | |
21 | Acked-by: Jeff Mahoney <jeffm@suse.com> | |
22 | --- | |
23 | ||
24 | fs/ext4/extents.c | 8 ++++++-- | |
25 | 1 file changed, 6 insertions(+), 2 deletions(-) | |
26 | ||
27 | --- a/fs/ext4/extents.c | |
28 | +++ b/fs/ext4/extents.c | |
29 | @@ -1877,12 +1877,16 @@ ext4_ext_rm_leaf(handle_t *handle, struc | |
30 | ex = EXT_LAST_EXTENT(eh); | |
31 | ||
32 | ex_ee_block = le32_to_cpu(ex->ee_block); | |
33 | - if (ext4_ext_is_uninitialized(ex)) | |
34 | - uninitialized = 1; | |
35 | ex_ee_len = ext4_ext_get_actual_len(ex); | |
36 | ||
37 | while (ex >= EXT_FIRST_EXTENT(eh) && | |
38 | ex_ee_block + ex_ee_len > start) { | |
39 | + | |
40 | + if (ext4_ext_is_uninitialized(ex)) | |
41 | + uninitialized = 1; | |
42 | + else | |
43 | + uninitialized = 0; | |
44 | + | |
45 | ext_debug("remove ext %lu:%u\n", ex_ee_block, ex_ee_len); | |
46 | path[depth].p_ext = ex; | |
47 |