diff --git a/0001-Fix-sanity-running-stuck.patch b/0001-Fix-sanity-running-stuck.patch new file mode 100644 index 0000000000000000000000000000000000000000..6a156b439f9ac1887dac8efe7f15bf947f70e2f0 --- /dev/null +++ b/0001-Fix-sanity-running-stuck.patch @@ -0,0 +1,262 @@ +From b85c7d2486a356e5dd90c4ceea7bc5df9fd6f596 Mon Sep 17 00:00:00 2001 +From: Xinliang Liu +Date: Mon, 18 Dec 2023 02:05:59 +0000 +Subject: [PATCH] Fix sanity running stuck + +Fix sanity test suite runing stuck, via reverting series patchset[1]. +See bug: https://gitee.com/src-openeuler/lustre/issues/I8OSQ4 + +[1] ext4: clean up ea_inode handling +https://lore.kernel.org/all/20230524034951.779531-1-tytso@mit.edu/#r + +Fixes: #I8OSQ4 +Signed-off-by: Xinliang Liu +--- + ...ries-ext4-clean-up-ea_inode-handling.patch | 225 ++++++++++++++++++ + .../series/ldiskfs-5.10.0-oe2203sp1.series | 1 + + 2 files changed, 226 insertions(+) + create mode 100644 ldiskfs/kernel_patches/patches/oe2203/Revert-series-ext4-clean-up-ea_inode-handling.patch + +diff --git a/ldiskfs/kernel_patches/patches/oe2203/Revert-series-ext4-clean-up-ea_inode-handling.patch b/ldiskfs/kernel_patches/patches/oe2203/Revert-series-ext4-clean-up-ea_inode-handling.patch +new file mode 100644 +index 0000000000..81dee6f59f +--- /dev/null ++++ b/ldiskfs/kernel_patches/patches/oe2203/Revert-series-ext4-clean-up-ea_inode-handling.patch +@@ -0,0 +1,225 @@ ++From 7bd3c4c17a9734e8b7ebed5495d5a4b4e1ee667d Mon Sep 17 00:00:00 2001 ++From: Xinliang Liu ++Date: Fri, 15 Dec 2023 08:39:35 +0000 ++Subject: [PATCH] Revert series "ext4: clean up ea_inode handling" ++ ++Revert series: ++https://lore.kernel.org/all/20230524034951.779531-1-tytso@mit.edu/ ++Becuase it seems ploblematic with ldiskfs and stucks the sanity test suite. ++See bug: https://gitee.com/src-openeuler/lustre/issues/I8OSQ4 ++ ++Revert "ext4: add lockdep annotations for i_data_sem for ea_inode's" ++ ++This reverts commit a08ff710284c1970f93c69593d50f8cf82e74518. ++ ++Signed-off-by: Xinliang Liu ++ ++Revert "ext4: disallow ea_inodes with extended attributes" ++ ++This reverts commit d1c9aab3dfe9db90715372106d4e6997e62ec66e. ++ ++Signed-off-by: Xinliang Liu ++ ++Revert "ext4: set lockdep subclass for the ea_inode in ext4_xattr_inode_cache_find()" ++ ++This reverts commit 2f477b813221855823702277cca30d0a7f22675d. ++ ++Signed-off-by: Xinliang Liu ++ ++Revert "ext4: add EA_INODE checking to ext4_iget()" ++ ++This reverts commit 2174f45d71dbc2f0cf9408e8a890b3dacd03399c. ++ ++Signed-off-by: Xinliang Liu ++--- ++ fs/ext4/ext4.h | 5 +---- ++ fs/ext4/inode.c | 34 +++++----------------------------- ++ fs/ext4/xattr.c | 41 +++++++++++++++++++++++++++++------------ ++ 3 files changed, 35 insertions(+), 45 deletions(-) ++ ++diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h ++index 25a6e1eb6811..210dcad8b82d 100644 ++--- a/fs/ext4/ext4.h +++++ b/fs/ext4/ext4.h ++@@ -992,13 +992,11 @@ do { \ ++ * where the second inode has larger inode number ++ * than the first ++ * I_DATA_SEM_QUOTA - Used for quota inodes only ++- * I_DATA_SEM_EA - Used for ea_inodes only ++ */ ++ enum { ++ I_DATA_SEM_NORMAL = 0, ++ I_DATA_SEM_OTHER, ++ I_DATA_SEM_QUOTA, ++- I_DATA_SEM_EA ++ }; ++ ++ ++@@ -2894,8 +2892,7 @@ typedef enum { ++ EXT4_IGET_NORMAL = 0, ++ EXT4_IGET_SPECIAL = 0x0001, /* OK to iget a system inode */ ++ EXT4_IGET_HANDLE = 0x0002, /* Inode # is from a handle */ ++- EXT4_IGET_BAD = 0x0004, /* Allow to iget a bad inode */ ++- EXT4_IGET_EA_INODE = 0x0008 /* Inode should contain an EA value */ +++ EXT4_IGET_BAD = 0x0004 /* Allow to iget a bad inode */ ++ } ext4_iget_flags; ++ ++ extern struct inode *__ext4_iget(struct super_block *sb, unsigned long ino, ++diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c ++index 0757f6a6455f..d45ea81a64dc 100644 ++--- a/fs/ext4/inode.c +++++ b/fs/ext4/inode.c ++@@ -4813,24 +4813,6 @@ static inline void ext4_inode_set_iversion_queried(struct inode *inode, u64 val) ++ inode_set_iversion_queried(inode, val); ++ } ++ ++-static const char *check_igot_inode(struct inode *inode, ext4_iget_flags flags) ++- ++-{ ++- if (flags & EXT4_IGET_EA_INODE) { ++- if (!(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL)) ++- return "missing EA_INODE flag"; ++- if (ext4_test_inode_state(inode, EXT4_STATE_XATTR) || ++- EXT4_I(inode)->i_file_acl) ++- return "ea_inode with extended attributes"; ++- } else { ++- if ((EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL)) ++- return "unexpected EA_INODE flag"; ++- } ++- if (is_bad_inode(inode) && !(flags & EXT4_IGET_BAD)) ++- return "unexpected bad inode w/o EXT4_IGET_BAD"; ++- return NULL; ++-} ++- ++ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino, ++ ext4_iget_flags flags, const char *function, ++ unsigned int line) ++@@ -4839,7 +4821,6 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino, ++ struct ext4_inode *raw_inode; ++ struct ext4_inode_info *ei; ++ struct inode *inode; ++- const char *err_str; ++ journal_t *journal = EXT4_SB(sb)->s_journal; ++ long ret; ++ loff_t size; ++@@ -4863,14 +4844,8 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino, ++ inode = iget_locked(sb, ino); ++ if (!inode) ++ return ERR_PTR(-ENOMEM); ++- if (!(inode->i_state & I_NEW)) { ++- if ((err_str = check_igot_inode(inode, flags)) != NULL) { ++- ext4_error_inode(inode, function, line, 0, err_str); ++- iput(inode); ++- return ERR_PTR(-EFSCORRUPTED); ++- } +++ if (!(inode->i_state & I_NEW)) ++ return inode; ++- } ++ ++ ei = EXT4_I(inode); ++ iloc.bh = NULL; ++@@ -5139,9 +5114,10 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino, ++ if (IS_CASEFOLDED(inode) && !ext4_has_feature_casefold(inode->i_sb)) ++ ext4_error_inode(inode, function, line, 0, ++ "casefold flag without casefold feature"); ++- if ((err_str = check_igot_inode(inode, flags)) != NULL) { ++- ext4_error_inode(inode, function, line, 0, err_str); ++- ret = -EFSCORRUPTED; +++ if (is_bad_inode(inode) && !(flags & EXT4_IGET_BAD)) { +++ ext4_error_inode(inode, function, line, 0, +++ "bad inode without EXT4_IGET_BAD flag"); +++ ret = -EUCLEAN; ++ goto bad_inode; ++ } ++ ++diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c ++index d223fb41ecec..d8a5c27b834b 100644 ++--- a/fs/ext4/xattr.c +++++ b/fs/ext4/xattr.c ++@@ -123,11 +123,7 @@ ext4_expand_inode_array(struct ext4_xattr_inode_array **ea_inode_array, ++ #ifdef CONFIG_LOCKDEP ++ void ext4_xattr_inode_set_class(struct inode *ea_inode) ++ { ++- struct ext4_inode_info *ei = EXT4_I(ea_inode); ++- ++ lockdep_set_subclass(&ea_inode->i_rwsem, 1); ++- (void) ei; /* shut up clang warning if !CONFIG_LOCKDEP */ ++- lockdep_set_subclass(&ei->i_data_sem, I_DATA_SEM_EA); ++ } ++ #endif ++ ++@@ -401,7 +397,7 @@ static int ext4_xattr_inode_iget(struct inode *parent, unsigned long ea_ino, ++ return -EFSCORRUPTED; ++ } ++ ++- inode = ext4_iget(parent->i_sb, ea_ino, EXT4_IGET_EA_INODE); +++ inode = ext4_iget(parent->i_sb, ea_ino, EXT4_IGET_NORMAL); ++ if (IS_ERR(inode)) { ++ err = PTR_ERR(inode); ++ ext4_error(parent->i_sb, ++@@ -409,6 +405,23 @@ static int ext4_xattr_inode_iget(struct inode *parent, unsigned long ea_ino, ++ err); ++ return err; ++ } +++ +++ if (is_bad_inode(inode)) { +++ ext4_error(parent->i_sb, +++ "error while reading EA inode %lu is_bad_inode", +++ ea_ino); +++ err = -EIO; +++ goto error; +++ } +++ +++ if (!(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL)) { +++ ext4_error(parent->i_sb, +++ "EA inode %lu does not have EXT4_EA_INODE_FL flag", +++ ea_ino); +++ err = -EINVAL; +++ goto error; +++ } +++ ++ ext4_xattr_inode_set_class(inode); ++ ++ /* ++@@ -429,6 +442,9 @@ static int ext4_xattr_inode_iget(struct inode *parent, unsigned long ea_ino, ++ ++ *ea_inode = inode; ++ return 0; +++error: +++ iput(inode); +++ return err; ++ } ++ ++ /* Remove entry from mbcache when EA inode is getting evicted */ ++@@ -1487,11 +1503,11 @@ ext4_xattr_inode_cache_find(struct inode *inode, const void *value, ++ ++ while (ce) { ++ ea_inode = ext4_iget(inode->i_sb, ce->e_value, ++- EXT4_IGET_EA_INODE); ++- if (IS_ERR(ea_inode)) ++- goto next_entry; ++- ext4_xattr_inode_set_class(ea_inode); ++- if (i_size_read(ea_inode) == value_len && +++ EXT4_IGET_NORMAL); +++ if (!IS_ERR(ea_inode) && +++ !is_bad_inode(ea_inode) && +++ (EXT4_I(ea_inode)->i_flags & EXT4_EA_INODE_FL) && +++ i_size_read(ea_inode) == value_len && ++ !ext4_xattr_inode_read(ea_inode, ea_data, value_len) && ++ !ext4_xattr_inode_verify_hashes(ea_inode, NULL, ea_data, ++ value_len) && ++@@ -1501,8 +1517,9 @@ ext4_xattr_inode_cache_find(struct inode *inode, const void *value, ++ kvfree(ea_data); ++ return ea_inode; ++ } ++- iput(ea_inode); ++- next_entry: +++ +++ if (!IS_ERR(ea_inode)) +++ iput(ea_inode); ++ ce = mb_cache_entry_find_next(ea_inode_cache, ce); ++ } ++ kvfree(ea_data); ++-- ++2.34.1 ++ +diff --git a/ldiskfs/kernel_patches/series/ldiskfs-5.10.0-oe2203sp1.series b/ldiskfs/kernel_patches/series/ldiskfs-5.10.0-oe2203sp1.series +index 68f1048c83..621f92dfd5 100644 +--- a/ldiskfs/kernel_patches/series/ldiskfs-5.10.0-oe2203sp1.series ++++ b/ldiskfs/kernel_patches/series/ldiskfs-5.10.0-oe2203sp1.series +@@ -1,3 +1,4 @@ ++oe2203/Revert-series-ext4-clean-up-ea_inode-handling.patch + oe2203/ext4-inode-version.patch + linux-5.4/ext4-lookup-dotdot.patch + suse15/ext4-print-inum-in-htree-warning.patch +-- +2.33.0 + diff --git a/lustre.spec b/lustre.spec index 2564f230fe96daaf8f7b3e6dc15794f2a04ec4b2..a91349bb088ed4adc82082b4b30a024d29f90afa 100644 --- a/lustre.spec +++ b/lustre.spec @@ -185,7 +185,7 @@ Summary: Lustre File System Name: %{lustre_name} Version: 2.15.3 -Release: 2 +Release: 3 License: GPL-2.0-only AND LGPL-2.1-or-later Group: System Environment/Kernel Source: https://github.com/lustre/lustre-release/archive/refs/tags/%{version}.tar.gz @@ -265,6 +265,7 @@ Patch59: 0059-LU-16019-llite-fully-disable-readahead-in-kernel-I-O.patch Patch60: 0060-Update-openEuler-22.03-kernels.patch Patch61: 0061-Update-kernel-for-openEuler-20.03-LTS.patch Patch62: 0062-ldiskfs-fix-build-for-oe2203sp3.patch +Patch63: 0001-Fix-sanity-running-stuck.patch %if %{with lustre_modules} Requires: %{requires_kmod_name} = %{requires_kmod_version} @@ -364,6 +365,7 @@ echo $TMPFILE %package osd-ldiskfs-mount Summary: osd-ldiskfs-mount contains mount's ldiskfs specific dso. BuildRequires: e2fsprogs-devel >= 1.44.3 +BuildRequires: e2fsprogs >= 1.44.3 Requires: ldiskfsprogs > 1.45.6 libmount Provides: lustre-osd-mount = %{version} Obsoletes: lustre-osd-mount < %{version} @@ -938,6 +940,9 @@ rm -rf $RPM_BUILD_ROOT rm -rf %{_tmppath}/kmp %changelog +* Mon Dec 18 2023 Xinliang Liu - 2.15.3-3 +- Fix sanity runing stuck + * Tue Nov 28 2023 Xinliang Liu - 2.15.3-2 - Fix build for oe2203sp3 new kernel 5.10.0-171.0.0.84.oe2203sp3.