From 06159785986aef19a06a69d02b7f203fc98b377a Mon Sep 17 00:00:00 2001 From: Yang Sheng Date: Thu, 25 May 2017 12:14:45 +0800 Subject: [PATCH] LU-9384 ldiskfs: extra patch for changing extra isize Port a patch from upstream for changing extra size: commit 887a9730614727c4fff7cb756711b190593fc1df "ext4: keep existing extra fields when inode expands" Signed-off-by: Yang Sheng Change-Id: I9555cb4efd1cbca257536ec699627e8fdb5a5b46 Reviewed-on: https://review.whamcloud.com/27285 Tested-by: Jenkins Reviewed-by: Andreas Dilger Reviewed-by: Bob Glossman Tested-by: Maloo --- ...-fix-xattr-shifting-when-expanding-inodes.patch | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/ldiskfs/kernel_patches/patches/rhel7/ext4-fix-xattr-shifting-when-expanding-inodes.patch b/ldiskfs/kernel_patches/patches/rhel7/ext4-fix-xattr-shifting-when-expanding-inodes.patch index a361f1c..6f36e90 100644 --- a/ldiskfs/kernel_patches/patches/rhel7/ext4-fix-xattr-shifting-when-expanding-inodes.patch +++ b/ldiskfs/kernel_patches/patches/rhel7/ext4-fix-xattr-shifting-when-expanding-inodes.patch @@ -407,3 +407,38 @@ index 1447860..82b025c 100644 -- 2.9.3 +From 887a9730614727c4fff7cb756711b190593fc1df Mon Sep 17 00:00:00 2001 +From: Konstantin Khlebnikov +Date: Sun, 21 May 2017 22:36:23 -0400 +Subject: [PATCH] ext4: keep existing extra fields when inode expands + +ext4_expand_extra_isize() should clear only space between old and new +size. + +Fixes: 6dd4ee7cab7e # v2.6.23 +Cc: stable@vger.kernel.org +Signed-off-by: Konstantin Khlebnikov +Signed-off-by: Theodore Ts'o +--- + fs/ext4/inode.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c +index 1bd0bfa..7cd99de 100644 +--- a/fs/ext4/inode.c ++++ b/fs/ext4/inode.c +@@ -5637,8 +5637,9 @@ static int ext4_expand_extra_isize(struct inode *inode, + /* No extended attributes present */ + if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) || + header->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC)) { +- memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE, 0, +- new_extra_isize); ++ memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE + ++ EXT4_I(inode)->i_extra_isize, 0, ++ new_extra_isize - EXT4_I(inode)->i_extra_isize); + EXT4_I(inode)->i_extra_isize = new_extra_isize; + return 0; + } +-- +2.9.3 + -- 1.8.3.1