add patch fix-quota-charging-for-shared-xattr-blocks
[ext4-patch-queue.git] / keep-existing-extra-fields-when-inode-expands
blob4e9faec4f5b8866cf3488d45117f1c9504e41d19
1 ext4: keep existing extra fields when inode expands
3 From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
5 ext4_expand_extra_isize() should clear only space between old and new
6 size.
8 Fixes: 6dd4ee7cab7e # v2.6.23
9 Cc: stable@vger.kernel.org
10 Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
11 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
12 ---
13  fs/ext4/inode.c |    5 +++--
14  1 file changed, 3 insertions(+), 2 deletions(-)
16 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
17 index 5834c4d76be8..7204e1a2801a 100644
18 --- a/fs/ext4/inode.c
19 +++ b/fs/ext4/inode.c
20 @@ -5637,8 +5637,9 @@ static int ext4_expand_extra_isize(struct inode *inode,
21         /* No extended attributes present */
22         if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) ||
23             header->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC)) {
24 -               memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE, 0,
25 -                       new_extra_isize);
26 +               memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE +
27 +                      EXT4_I(inode)->i_extra_isize, 0,
28 +                      new_extra_isize - EXT4_I(inode)->i_extra_isize);
29                 EXT4_I(inode)->i_extra_isize = new_extra_isize;
30                 return 0;
31         }