tree: https://gitee.com/openeuler/kernel.git openEuler-1.0-LTS
head: 1ee05443d1dbf5cf95dcc762bb2baa828e2ccbcc
commit: d4bdc26bcd632cee393b5171345d5fa6293fe42b [7838/23480] include/asm-generic/bug.h: fix "cut here" for WARN_ON for __WARN_TAINT architectures
config: x86_64-randconfig-161-20240810 (https://download.01.org/0day-ci/archive/20240810/202408101202.aWgNk9Gj-lkp@…)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240810/202408101202.aWgNk9Gj-lkp@…)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202408101202.aWgNk9Gj-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c:65:1: warning: no previous prototype for function 'nvkm_mmu_ptp_get' [-Wmissing-prototypes]
65 | nvkm_mmu_ptp_get(struct nvkm_mmu *mmu, u32 size, bool zero)
| ^
drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c:64:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
64 | struct nvkm_mmu_pt *
| ^
| static
1 warning generated.
>> drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.o: warning: objtool: nvkm_mmu_oneinit()+0x7b2: unreachable instruction
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAJ2ZJ
--------------------------------
This reverts commit 812ffba3b83c86bba38fd087fa41fe2f08f7acb6.
Commit 812ffba3b83c ("NFS: Don't interrupt file writeout due to fatal
errors") tries to keep writing back when hit fatal errors.
However, since page->mapping will be set as NULL in
nfs_write_error_remove_page() and it will be used in nfs_create_request(),
null-ptr-deref will be triggered if we don't stop it immediately.
Fixes: 812ffba3b83c ("NFS: Don't interrupt file writeout due to fatal errors")
Signed-off-by: Li Lingfeng <lilingfeng3(a)huawei.com>
---
fs/nfs/write.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index e4b1ce488637..706ed79e23e2 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -662,7 +662,7 @@ static int nfs_page_async_flush(struct nfs_pageio_descriptor *pgio,
return ret;
out_launder:
nfs_write_error_remove_page(req);
- return 0;
+ return ret;
}
static int nfs_do_writepage(struct page *page, struct writeback_control *wbc,
--
2.31.1
hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAAPPE
--------------------------------
After commit 244adf6426ee ("ext4: make dioread_nolock the default"),
writeback for ext4 mounted with dioread_nolock will first start journal,
then get a unwritten extent, change i_size and mark inode dirty. Besides,
we won't call ext4_jbd2_inode_add_write since the extent is unwritten, so
when jbd2 try do commit journal, we will not wait stable data. And combine
with a poweroff before data writepage success, we will find a file with
size has already been update but the content still keep zero since the
extent is unwritten. This is really intolerable for some production.
So we need give a choice to decided does we really need default enable
dioread_nolock.
Back to why we default enable dioread_nolock, the upper commit give some
description, the most import problem is that dioread parallel with fault
write(and writepage for fault write has alloc the block) will read some
stale data. But the case dioread parallel with fault write is really
rarely used, so it seems little impact now.
We now give a more flexible way to control how to default enable
dioread_nolock or not:
- set CONFIG_EXT4_DIOREAD_NOLOCK_PARAM to N, still default enable
dioread_nlock
- set CONFIG_EXT4_DIOREAD_NOLOCK_PARAM to Y, default disable
dioread_nolock, also we give a module param default_dioread_nolock to
control it, it you want default enable dioread_nlock, set
default_dioread_nolock to 1.
Fixes: 244adf6426ee ("ext4: make dioread_nolock the default")
Signed-off-by: Yang Erkun <yangerkun(a)huawei.com>
---
arch/arm64/configs/openeuler_defconfig | 1 +
arch/x86/configs/openeuler_defconfig | 1 +
fs/ext4/Kconfig | 8 ++++++++
fs/ext4/super.c | 19 +++++++++++++++++++
4 files changed, 29 insertions(+)
diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig
index 86f6cfaafa85..2d6b37def3fb 100644
--- a/arch/arm64/configs/openeuler_defconfig
+++ b/arch/arm64/configs/openeuler_defconfig
@@ -6207,6 +6207,7 @@ CONFIG_EXT4_USE_FOR_EXT2=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not set
+# CONFIG_EXT4_DIOREAD_NOLOCK_PARAM is not set
CONFIG_JBD2=m
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=m
diff --git a/arch/x86/configs/openeuler_defconfig b/arch/x86/configs/openeuler_defconfig
index 686e5cdfc801..27b1f9def28d 100644
--- a/arch/x86/configs/openeuler_defconfig
+++ b/arch/x86/configs/openeuler_defconfig
@@ -7292,6 +7292,7 @@ CONFIG_EXT4_USE_FOR_EXT2=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not set
+# CONFIG_EXT4_DIOREAD_NOLOCK_PARAM is not set
CONFIG_JBD2=m
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=m
diff --git a/fs/ext4/Kconfig b/fs/ext4/Kconfig
index 86699c8cab28..72913ea5343f 100644
--- a/fs/ext4/Kconfig
+++ b/fs/ext4/Kconfig
@@ -117,3 +117,11 @@ config EXT4_KUNIT_TESTS
to the KUnit documentation in Documentation/dev-tools/kunit/.
If unsure, say N.
+
+config EXT4_DIOREAD_NOLOCK_PARAM
+ bool "Ext4 default_dioread_nolock module param support"
+ depends on EXT4_FS
+ default n
+ help
+ Support to enable default_dioread_nolock module param, be attention to
+ that we default disable dioread_nolock with this config set to Y.
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index ac032f517a60..5dbe420487e4 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -62,6 +62,20 @@
#define CREATE_TRACE_POINTS
#include <trace/events/ext4.h>
+#ifdef CONFIG_EXT4_DIOREAD_NOLOCK_PARAM
+/*
+ * After 244adf6426ee ("ext4: make dioread_nolock the default"), we will enable
+ * dioread_nolock by default, but this options may lead data lose combine with
+ * poweroff(Since we may first update i_size, and then unwritten extent convert
+ * to written extent). For this case, we give a param to help control does we
+ * really default enable dioread_nolock and we default disable dioread_nolock,
+ * enable it with ext4.default_dioread_nolock=1 if you want.
+ */
+int default_dioread_nolock;
+module_param_named(default_dioread_nolock, default_dioread_nolock, int, 0644);
+MODULE_PARM_DESC(default_dioread_nolock, "Default enable dioread_nolock");
+#endif
+
static struct ext4_lazy_init *ext4_li_info;
static struct mutex ext4_li_mtx;
static struct ratelimit_state ext4_mount_msg_ratelimit;
@@ -4272,8 +4286,13 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
blocksize = EXT4_MIN_BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
+#ifdef CONFIG_EXT4_DIOREAD_NOLOCK_PARAM
+ if (blocksize == PAGE_SIZE && default_dioread_nolock)
+ set_opt(sb, DIOREAD_NOLOCK);
+#else
if (blocksize == PAGE_SIZE)
set_opt(sb, DIOREAD_NOLOCK);
+#endif
if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV) {
sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE;
--
2.39.2
hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAAPPE
--------------------------------
After commit 244adf6426ee ("ext4: make dioread_nolock the default"),
writeback for ext4 mounted with dioread_nolock will first start journal,
then get a unwritten extent, change i_size and mark inode dirty. Besides,
we won't call ext4_jbd2_inode_add_write since the extent is unwritten, so
when jbd2 try do commit journal, we will not wait stable data. And combine
with a poweroff before data writepage success, we will find a file with
size has already been update but the content still keep zero since the
extent is unwritten. This is really intolerable for some production.
So we need give a choice to decided does we really need default enable
dioread_nolock.
Back to why we default enable dioread_nolock, the upper commit give some
description, the most import problem is that dioread parallel with fault
write(and writepage for fault write has alloc the block) will read some
stale data. But the case dioread parallel with fault write is really
rarely used, so it seems little impact now.
We now give a more flexible way to control how to default enable
dioread_nolock or not:
- set CONFIG_EXT4_DIOREAD_NOLOCK_PARAM to N, still default enable
dioread_nlock
- set CONFIG_EXT4_DIOREAD_NOLOCK_PARAM to Y, default disable
dioread_nolock, also we give a module param default_dioread_nolock to
control it, it you want default enable dioread_nlock, set
default_dioread_nolock to 1.
Fixes: 244adf6426ee ("ext4: make dioread_nolock the default")
Signed-off-by: Yang Erkun <yangerkun(a)huawei.com>
---
arch/arm64/configs/openeuler_defconfig | 1 +
arch/x86/configs/openeuler_defconfig | 1 +
fs/ext4/Kconfig | 8 ++++++++
fs/ext4/super.c | 19 +++++++++++++++++++
4 files changed, 29 insertions(+)
diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig
index 072d26fcc238..650fe88cbb04 100644
--- a/arch/arm64/configs/openeuler_defconfig
+++ b/arch/arm64/configs/openeuler_defconfig
@@ -6954,6 +6954,7 @@ CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not set
CONFIG_EXT4_ERROR_REPORT=y
+# CONFIG_EXT4_DIOREAD_NOLOCK_PARAM is not set
CONFIG_JBD2=m
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=m
diff --git a/arch/x86/configs/openeuler_defconfig b/arch/x86/configs/openeuler_defconfig
index f86f22d8b397..b3403ba040bf 100644
--- a/arch/x86/configs/openeuler_defconfig
+++ b/arch/x86/configs/openeuler_defconfig
@@ -8117,6 +8117,7 @@ CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not set
CONFIG_EXT4_ERROR_REPORT=y
+# CONFIG_EXT4_DIOREAD_NOLOCK_PARAM is not set
CONFIG_JBD2=m
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=m
diff --git a/fs/ext4/Kconfig b/fs/ext4/Kconfig
index 3b095c5aa1d3..68270899fc81 100644
--- a/fs/ext4/Kconfig
+++ b/fs/ext4/Kconfig
@@ -126,3 +126,11 @@ config EXT4_ERROR_REPORT
help
Implement the ext3/ext4 file system error report. Report error to
userspace by netlink
+
+config EXT4_DIOREAD_NOLOCK_PARAM
+ bool "Ext4 default_dioread_nolock module param support"
+ depends on EXT4_FS
+ default n
+ help
+ Support to enable default_dioread_nolock module param, be attention to
+ that we default disable dioread_nolock with this config set to Y.
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 0ef4b804e18e..9f3c7855095d 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -66,6 +66,20 @@
#define CREATE_TRACE_POINTS
#include <trace/events/ext4.h>
+#ifdef CONFIG_EXT4_DIOREAD_NOLOCK_PARAM
+/*
+ * After 244adf6426ee ("ext4: make dioread_nolock the default"), we will enable
+ * dioread_nolock by default, but this options may lead data lose combine with
+ * poweroff(Since we may first update i_size, and then unwritten extent convert
+ * to written extent). For this case, we give a param to help control does we
+ * really default enable dioread_nolock and we default disable dioread_nolock,
+ * enable it with ext4.default_dioread_nolock=1 if you want.
+ */
+int default_dioread_nolock;
+module_param_named(default_dioread_nolock, default_dioread_nolock, int, 0644);
+MODULE_PARM_DESC(default_dioread_nolock, "Default enable dioread_nolock");
+#endif
+
static struct ext4_lazy_init *ext4_li_info;
static DEFINE_MUTEX(ext4_li_mtx);
static struct ratelimit_state ext4_mount_msg_ratelimit;
@@ -4472,8 +4486,13 @@ static void ext4_set_def_opts(struct super_block *sb,
((def_mount_opts & EXT4_DEFM_NODELALLOC) == 0))
set_opt(sb, DELALLOC);
+#ifdef CONFIG_EXT4_DIOREAD_NOLOCK_PARAM
+ if (sb->s_blocksize == PAGE_SIZE && default_dioread_nolock)
+ set_opt(sb, DIOREAD_NOLOCK);
+#else
if (sb->s_blocksize == PAGE_SIZE)
set_opt(sb, DIOREAD_NOLOCK);
+#endif
/* Use iomap for buffered IO path on 4k pagesize */
if (PAGE_SIZE == SZ_4K)
--
2.39.2
hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAAPPE
--------------------------------
After commit 244adf6426ee ("ext4: make dioread_nolock the default"),
writeback for ext4 mounted with dioread_nolock will first start journal,
then get a unwritten extent, change i_size and mark inode dirty. Besides,
we won't call ext4_jbd2_inode_add_write since the extent is unwritten, so
when jbd2 try do commit journal, we will not wait stable data. And combine
with a poweroff before data writepage success, we will find a file with
size has already been update but the content still keep zero since the
extent is unwritten. This is really intolerable for some production.
So we need give a choice to decided does we really need default enable
dioread_nolock.
Back to why we default enable dioread_nolock, the upper commit give some
description, the most import problem is that dioread parallel with fault
write(and writepage for fault write has alloc the block) will read some
stale data. But the case dioread parallel with fault write is really
rarely used, so it seems little impact now.
We now give a more flexible way to control how to default enable
dioread_nolock or not:
- set CONFIG_EXT4_DIOREAD_NOLOCK_PARAM to N, still default enable
dioread_nlock
- set CONFIG_EXT4_DIOREAD_NOLOCK_PARAM to Y, default disable
dioread_nolock, also we give a module param default_dioread_nolock to
control it, it you want default enable dioread_nlock, set
default_dioread_nolock to 1.
Fixes: 244adf6426ee ("ext4: make dioread_nolock the default")
Signed-off-by: Yang Erkun <yangerkun(a)huawei.com>
---
arch/arm64/configs/openeuler_defconfig | 1 +
arch/x86/configs/openeuler_defconfig | 1 +
fs/ext4/Kconfig | 8 ++++++++
fs/ext4/super.c | 19 +++++++++++++++++++
4 files changed, 29 insertions(+)
diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig
index 69ff0b64ba59..553dfbac6e4d 100644
--- a/arch/arm64/configs/openeuler_defconfig
+++ b/arch/arm64/configs/openeuler_defconfig
@@ -6326,6 +6326,7 @@ CONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not set
CONFIG_EXT4_ERROR_REPORT=y
CONFIG_EXT4_MITIGATION_FALSE_SHARING=y
+# CONFIG_EXT4_DIOREAD_NOLOCK_PARAM is not set
CONFIG_JBD2=m
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=m
diff --git a/arch/x86/configs/openeuler_defconfig b/arch/x86/configs/openeuler_defconfig
index f3b810d0cf47..9f07c24ea89d 100644
--- a/arch/x86/configs/openeuler_defconfig
+++ b/arch/x86/configs/openeuler_defconfig
@@ -7384,6 +7384,7 @@ CONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not set
CONFIG_EXT4_ERROR_REPORT=y
CONFIG_EXT4_MITIGATION_FALSE_SHARING=y
+# CONFIG_EXT4_DIOREAD_NOLOCK_PARAM is not set
CONFIG_JBD2=m
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=m
diff --git a/fs/ext4/Kconfig b/fs/ext4/Kconfig
index cd7f1e90c237..2e1a5b0796ed 100644
--- a/fs/ext4/Kconfig
+++ b/fs/ext4/Kconfig
@@ -134,3 +134,11 @@ config EXT4_MITIGATION_FALSE_SHARING
Enable this to mitigation cacheline false sharing in ext4 inode info.
If unsure, say N.
+
+config EXT4_DIOREAD_NOLOCK_PARAM
+ bool "Ext4 default_dioread_nolock module param support"
+ depends on EXT4_FS
+ default n
+ help
+ Support to enable default_dioread_nolock module param, be attention to
+ that we default disable dioread_nolock with this config set to Y.
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 90f886184fc6..db64771c6e46 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -64,6 +64,20 @@
#define CREATE_TRACE_POINTS
#include <trace/events/ext4.h>
+#ifdef CONFIG_EXT4_DIOREAD_NOLOCK_PARAM
+/*
+ * After 244adf6426ee ("ext4: make dioread_nolock the default"), we will enable
+ * dioread_nolock by default, but this options may lead data lose combine with
+ * poweroff(Since we may first update i_size, and then unwritten extent convert
+ * to written extent). For this case, we give a param to help control does we
+ * really default enable dioread_nolock and we default disable dioread_nolock,
+ * enable it with ext4.default_dioread_nolock=1 if you want.
+ */
+int default_dioread_nolock;
+module_param_named(default_dioread_nolock, default_dioread_nolock, int, 0644);
+MODULE_PARM_DESC(default_dioread_nolock, "Default enable dioread_nolock");
+#endif
+
static struct ext4_lazy_init *ext4_li_info;
static struct mutex ext4_li_mtx;
static struct ratelimit_state ext4_mount_msg_ratelimit;
@@ -4292,8 +4306,13 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
blocksize = EXT4_MIN_BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
+#ifdef CONFIG_EXT4_DIOREAD_NOLOCK_PARAM
+ if (blocksize == PAGE_SIZE && default_dioread_nolock)
+ set_opt(sb, DIOREAD_NOLOCK);
+#else
if (blocksize == PAGE_SIZE)
set_opt(sb, DIOREAD_NOLOCK);
+#endif
if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV) {
sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE;
--
2.39.2
hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAAPPE
--------------------------------
After commit 244adf6426ee ("ext4: make dioread_nolock the default"),
writeback for ext4 mounted with dioread_nolock will first start journal,
then get a unwritten extent, change i_size and mark inode dirty. Besides,
we won't call ext4_jbd2_inode_add_write since the extent is unwritten, so
when jbd2 try do commit journal, we will not wait stable data. And combine
with a poweroff before data writepage success, we will find a file with
size has already been update but the content still keep zero since the
extent is unwritten. This is really intolerable for some production.
So we need give a choice to decided does we really need default enable
dioread_nolock.
Back to why we default enable dioread_nolock, the upper commit give some
description, the most import problem is that dioread parallel with fault
write(and writepage for fault write has alloc the block) will read some
stale data. But the case dioread parallel with fault write is really
rarely used, so it seems little impact now.
We now give a more flexible way to control how to default enable
dioread_nolock or not:
- set CONFIG_EXT4_DIOREAD_NOLOCK_PARAM to N, still default enable
dioread_nlock
- set CONFIG_EXT4_DIOREAD_NOLOCK_PARAM to Y, default disable
dioread_nolock, also we give a module param default_dioread_nolock to
control it, it you want default enable dioread_nlock, set
default_dioread_nolock to 1.
Fixes: 244adf6426ee ("ext4: make dioread_nolock the default")
Signed-off-by: Yang Erkun <yangerkun(a)huawei.com>
---
arch/arm64/configs/openeuler_defconfig | 1 +
arch/x86/configs/openeuler_defconfig | 1 +
fs/ext4/Kconfig | 8 ++++++++
fs/ext4/super.c | 19 +++++++++++++++++++
4 files changed, 29 insertions(+)
diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig
index 072d26fcc238..650fe88cbb04 100644
--- a/arch/arm64/configs/openeuler_defconfig
+++ b/arch/arm64/configs/openeuler_defconfig
@@ -6954,6 +6954,7 @@ CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not set
CONFIG_EXT4_ERROR_REPORT=y
+# CONFIG_EXT4_DIOREAD_NOLOCK_PARAM is not set
CONFIG_JBD2=m
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=m
diff --git a/arch/x86/configs/openeuler_defconfig b/arch/x86/configs/openeuler_defconfig
index f86f22d8b397..b3403ba040bf 100644
--- a/arch/x86/configs/openeuler_defconfig
+++ b/arch/x86/configs/openeuler_defconfig
@@ -8117,6 +8117,7 @@ CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not set
CONFIG_EXT4_ERROR_REPORT=y
+# CONFIG_EXT4_DIOREAD_NOLOCK_PARAM is not set
CONFIG_JBD2=m
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=m
diff --git a/fs/ext4/Kconfig b/fs/ext4/Kconfig
index 3b095c5aa1d3..68270899fc81 100644
--- a/fs/ext4/Kconfig
+++ b/fs/ext4/Kconfig
@@ -126,3 +126,11 @@ config EXT4_ERROR_REPORT
help
Implement the ext3/ext4 file system error report. Report error to
userspace by netlink
+
+config EXT4_DIOREAD_NOLOCK_PARAM
+ bool "Ext4 default_dioread_nolock module param support"
+ depends on EXT4_FS
+ default n
+ help
+ Support to enable default_dioread_nolock module param, be attention to
+ that we default disable dioread_nolock with this config set to Y.
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 0ef4b804e18e..9f3c7855095d 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -66,6 +66,20 @@
#define CREATE_TRACE_POINTS
#include <trace/events/ext4.h>
+#ifdef CONFIG_EXT4_DIOREAD_NOLOCK_PARAM
+/*
+ * After 244adf6426ee ("ext4: make dioread_nolock the default"), we will enable
+ * dioread_nolock by default, but this options may lead data lose combine with
+ * poweroff(Since we may first update i_size, and then unwritten extent convert
+ * to written extent). For this case, we give a param to help control does we
+ * really default enable dioread_nolock and we default disable dioread_nolock,
+ * enable it with ext4.default_dioread_nolock=1 if you want.
+ */
+int default_dioread_nolock;
+module_param_named(default_dioread_nolock, default_dioread_nolock, int, 0644);
+MODULE_PARM_DESC(default_dioread_nolock, "Default enable dioread_nolock");
+#endif
+
static struct ext4_lazy_init *ext4_li_info;
static DEFINE_MUTEX(ext4_li_mtx);
static struct ratelimit_state ext4_mount_msg_ratelimit;
@@ -4472,8 +4486,13 @@ static void ext4_set_def_opts(struct super_block *sb,
((def_mount_opts & EXT4_DEFM_NODELALLOC) == 0))
set_opt(sb, DELALLOC);
+#ifdef CONFIG_EXT4_DIOREAD_NOLOCK_PARAM
+ if (sb->s_blocksize == PAGE_SIZE && default_dioread_nolock)
+ set_opt(sb, DIOREAD_NOLOCK);
+#else
if (sb->s_blocksize == PAGE_SIZE)
set_opt(sb, DIOREAD_NOLOCK);
+#endif
/* Use iomap for buffered IO path on 4k pagesize */
if (PAGE_SIZE == SZ_4K)
--
2.39.2
From: Daniel Borkmann <daniel(a)iogearbox.net>
mainline inclusion
from mainline-6.10
commit 626dfed5fa3bfb41e0dffd796032b555b69f9cde
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAILGI
CVE: CVE-2024-42246
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?…
-------------------------------------------------
When using a BPF program on kernel_connect(), the call can return -EPERM. This
causes xs_tcp_setup_socket() to loop forever, filling up the syslog and causing
the kernel to potentially freeze up.
Neil suggested:
This will propagate -EPERM up into other layers which might not be ready
to handle it. It might be safer to map EPERM to an error we would be more
likely to expect from the network system - such as ECONNREFUSED or ENETDOWN.
ECONNREFUSED as error seems reasonable. For programs setting a different error
can be out of reach (see handling in 4fbac77d2d09) in particular on kernels
which do not have f10d05966196 ("bpf: Make BPF_PROG_RUN_ARRAY return -err
instead of allow boolean"), thus given that it is better to simply remap for
consistent behavior. UDP does handle EPERM in xs_udp_send_request().
Fixes: d74bad4e74ee ("bpf: Hooks for sys_connect")
Fixes: 4fbac77d2d09 ("bpf: Hooks for sys_bind")
Co-developed-by: Lex Siegel <usiegl00(a)gmail.com>
Signed-off-by: Lex Siegel <usiegl00(a)gmail.com>
Signed-off-by: Daniel Borkmann <daniel(a)iogearbox.net>
Cc: Neil Brown <neilb(a)suse.de>
Cc: Trond Myklebust <trondmy(a)kernel.org>
Cc: Anna Schumaker <anna(a)kernel.org>
Link: https://github.com/cilium/cilium/issues/33395
Link: https://lore.kernel.org/bpf/171374175513.12877.8993642908082014881@noble.ne…
Link: https://patch.msgid.link/9069ec1d59e4b2129fc23433349fd5580ad43921.172007507…
Signed-off-by: Paolo Abeni <pabeni(a)redhat.com>
Conflicts:
net/sunrpc/xprtsock.c
[Did not backport 280254b605ff ("SUNRPC: Clean up xs_tcp_setup_sock()").]
Signed-off-by: Liu Jian <liujian56(a)huawei.com>
---
net/sunrpc/xprtsock.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 31b1ab97140b..134a90b2216c 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -2337,6 +2337,13 @@ static void xs_tcp_setup_socket(struct work_struct *work)
case -EALREADY:
xprt_unlock_connect(xprt, transport);
return;
+ case -EPERM:
+ /* Happens, for instance, if a BPF program is preventing
+ * the connect. Remap the error so upper layers can better
+ * deal with it.
+ */
+ status = -ECONNREFUSED;
+ fallthrough;
case -EINVAL:
/* Happens, for instance, if the user specified a link
* local IPv6 address without a scope-id.
--
2.34.1