Viewing: ext4-old_ea_inodes_handling_fix.patch
commit 76c3fa96dc30f21e95d80f9119972d7358975258
Author: Alexander Zarochentsev <alexander.zarochentsev@hpe.com>
AuthorDate: Tue Aug 9 10:55:48 2022 +0300
LU-16082 ldiskfs: old-style EA inode handling fix
The upstream version of EA inodes support coming
with RHEL8 (linux kernel 4.18+) have a slightly different
implementation of EA inodes support and also have a
compatibility code to recognize old-style Lustre-only EAs.
Unfortunately the compatibility code is broken and makes
old xattr data unaccessible due to a wrong hash value check.
HPE-bug-id: LUS-11133
Signed-off-by: Alexander Zarochentsev <alexander.zarochentsev@hpe.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-by: Artem Blagodarenko <ablagodarenko@ddn.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Change-Id: Icd6f93d4ebb33dcd03b58f9eb364905c18ae81dc
Reviewed-on: https://review.whamcloud.com/48174
Index: linux-stage/fs/ext4/xattr.c
===================================================================
--- linux-stage.orig/fs/ext4/xattr.c
+++ linux-stage/fs/ext4/xattr.c
@@ -415,10 +415,11 @@ static int ext4_xattr_inode_iget(struct
/*
* Check whether this is an old Lustre-style xattr inode. Lustre
- * implementation does not have hash validation, rather it has a
- * backpointer from ea_inode to the parent inode.
+ * implementation sets ea_inode->i_atime.tv_sec to 0
+ * (when md csum is off, means always)
+ * and backpointer from ea_inode to the parent inode.
*/
- if (ea_inode_hash != ext4_xattr_inode_get_hash(inode) &&
+ if (ext4_xattr_inode_get_hash(inode) == 0 &&
EXT4_XATTR_INODE_GET_PARENT(inode) == parent->i_ino &&
inode->i_generation == parent->i_generation) {
ext4_set_inode_state(inode, EXT4_STATE_LUSTRE_EA_INODE);