]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - src/patches/suse-2.6.27.31/patches.fixes/ext4-avoid-corrupting-the-uninitialized-bit-in-the-extent-during-truncate
Merge branch 'master' of git://git.ipfire.org/ipfire-2.x
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.fixes / ext4-avoid-corrupting-the-uninitialized-bit-in-the-extent-during-truncate
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