[packages/zfs] - upstream fix for krenels < 4.20, rel 2
baggins
baggins at pld-linux.org
Sat Dec 14 16:28:20 CET 2024
commit 1d2c4ea649de3dbfd50a07ce2d764f8a2b4e21b6
Author: Jan Rękorajski <baggins at pld-linux.org>
Date: Sat Dec 14 15:51:22 2024 +0100
- upstream fix for krenels < 4.20, rel 2
dequeue_signal.patch | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++
zfs.spec | 8 ++--
2 files changed, 135 insertions(+), 3 deletions(-)
---
diff --git a/zfs.spec b/zfs.spec
index e1dd7c9..f11bdc0 100644
--- a/zfs.spec
+++ b/zfs.spec
@@ -24,7 +24,7 @@ exit 1
%define _duplicate_files_terminate_build 0
-%define rel 1
+%define rel 2
%define pname zfs
Summary: Native Linux port of the ZFS filesystem
Summary(pl.UTF-8): Natywny linuksowy port systemu plików ZFS
@@ -37,6 +37,7 @@ Source0: https://github.com/openzfs/zfs/releases/download/zfs-%{version}/%{pname
# Source0-md5: 25d3e7afe00e04abe2c795cf644070af
Patch0: initdir.patch
Patch1: pld.patch
+Patch2: dequeue_signal.patch
URL: https://zfsonlinux.org/
BuildRequires: autoconf >= 2.50
BuildRequires: automake
@@ -259,8 +260,9 @@ p=`pwd`\
%prep
%setup -q -n %{pname}-%{version}
-%patch0 -p1
-%patch1 -p1
+%patch -P 0 -p1
+%patch -P 1 -p1
+%patch -P 2 -p1
%{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+python3(\s|$),#!%{__python3}\1,' \
cmd/arc_summary
diff --git a/dequeue_signal.patch b/dequeue_signal.patch
new file mode 100644
index 0000000..78c2bce
--- /dev/null
+++ b/dequeue_signal.patch
@@ -0,0 +1,130 @@
+From 21cba06befe98abe99c07b5827ca364836bcd17d Mon Sep 17 00:00:00 2001
+From: Rob Norris <robn at despairlabs.com>
+Date: Mon, 21 Oct 2024 13:50:13 +1100
+Subject: [PATCH] config: fix dequeue_signal check for kernels <4.20
+
+Before 4.20, kernel_siginfo_t was just called siginfo_t. This was
+causing the kthread_dequeue_signal_3arg_task check, which uses
+kernel_siginfo_t, to fail on older kernels.
+
+In d6b8c17f1, we started checking for the "new" three-arg
+dequeue_signal() by testing for the "old" version. Because that test is
+explicitly using kernel_siginfo_t, it would fail, leading to the build
+trying to use the new three-arg version, which would then not compile.
+
+This commit fixes that by avoiding checking for the old 3-arg
+dequeue_signal entirely. Instead, we check for the new one, as well as
+the 4-arg form, and we use the old form as a fallback. This way, we
+never have to test for it explicitly, and once we're building
+HAVE_SIGINFO will make sure we get the right kernel_siginfo_t for it, so
+everything works out nice.
+
+Original-patch-by: Finix <yancw at info2soft.com>
+Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
+Signed-off-by: Rob Norris <robn at despairlabs.com>
+Closes #16666
+---
+ config/kernel-kthread.m4 | 37 +++++++++++++++++++-------------
+ module/os/linux/spl/spl-thread.c | 6 +++---
+ 2 files changed, 25 insertions(+), 18 deletions(-)
+
+diff --git a/config/kernel-kthread.m4 b/config/kernel-kthread.m4
+index 4d580efead6b..607953146323 100644
+--- a/config/kernel-kthread.m4
++++ b/config/kernel-kthread.m4
+@@ -17,14 +17,21 @@ AC_DEFUN([ZFS_AC_KERNEL_KTHREAD_COMPLETE_AND_EXIT], [
+
+ AC_DEFUN([ZFS_AC_KERNEL_KTHREAD_DEQUEUE_SIGNAL], [
+ dnl #
+- dnl # 5.17 API: enum pid_type * as new 4th dequeue_signal() argument,
+- dnl # 5768d8906bc23d512b1a736c1e198aa833a6daa4 ("signal: Requeue signals in the appropriate queue")
++ dnl # prehistory:
++ dnl # int dequeue_signal(struct task_struct *task, sigset_t *mask,
++ dnl # siginfo_t *info)
+ dnl #
+- dnl # int dequeue_signal(struct task_struct *task, sigset_t *mask, kernel_siginfo_t *info);
+- dnl # int dequeue_signal(struct task_struct *task, sigset_t *mask, kernel_siginfo_t *info, enum pid_type *type);
++ dnl # 4.20: kernel_siginfo_t introduced, replaces siginfo_t
++ dnl # int dequeue_signal(struct task_struct *task, sigset_t *mask,
++ dnl kernel_siginfo_t *info)
+ dnl #
+- dnl # 6.12 API: first arg struct_task* removed
+- dnl # int dequeue_signal(sigset_t *mask, kernel_siginfo_t *info, enum pid_type *type);
++ dnl # 5.17: enum pid_type introduced as 4th arg
++ dnl # int dequeue_signal(struct task_struct *task, sigset_t *mask,
++ dnl # kernel_siginfo_t *info, enum pid_type *type)
++ dnl #
++ dnl # 6.12: first arg struct_task* removed
++ dnl # int dequeue_signal(sigset_t *mask, kernel_siginfo_t *info,
++ dnl # enum pid_type *type)
+ dnl #
+ AC_MSG_CHECKING([whether dequeue_signal() takes 4 arguments])
+ ZFS_LINUX_TEST_RESULT([kthread_dequeue_signal_4arg], [
+@@ -33,11 +40,11 @@ AC_DEFUN([ZFS_AC_KERNEL_KTHREAD_DEQUEUE_SIGNAL], [
+ [dequeue_signal() takes 4 arguments])
+ ], [
+ AC_MSG_RESULT(no)
+- AC_MSG_CHECKING([whether dequeue_signal() a task argument])
+- ZFS_LINUX_TEST_RESULT([kthread_dequeue_signal_3arg_task], [
++ AC_MSG_CHECKING([whether 3-arg dequeue_signal() takes a type argument])
++ ZFS_LINUX_TEST_RESULT([kthread_dequeue_signal_3arg_type], [
+ AC_MSG_RESULT(yes)
+- AC_DEFINE(HAVE_DEQUEUE_SIGNAL_3ARG_TASK, 1,
+- [dequeue_signal() takes a task argument])
++ AC_DEFINE(HAVE_DEQUEUE_SIGNAL_3ARG_TYPE, 1,
++ [3-arg dequeue_signal() takes a type argument])
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+@@ -56,27 +63,27 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_KTHREAD_COMPLETE_AND_EXIT], [
+ ])
+
+ AC_DEFUN([ZFS_AC_KERNEL_SRC_KTHREAD_DEQUEUE_SIGNAL], [
+- ZFS_LINUX_TEST_SRC([kthread_dequeue_signal_3arg_task], [
++ ZFS_LINUX_TEST_SRC([kthread_dequeue_signal_4arg], [
+ #include <linux/sched/signal.h>
+ ], [
+ struct task_struct *task = NULL;
+ sigset_t *mask = NULL;
+ kernel_siginfo_t *info = NULL;
++ enum pid_type *type = NULL;
+ int error __attribute__ ((unused));
+
+- error = dequeue_signal(task, mask, info);
++ error = dequeue_signal(task, mask, info, type);
+ ])
+
+- ZFS_LINUX_TEST_SRC([kthread_dequeue_signal_4arg], [
++ ZFS_LINUX_TEST_SRC([kthread_dequeue_signal_3arg_type], [
+ #include <linux/sched/signal.h>
+ ], [
+- struct task_struct *task = NULL;
+ sigset_t *mask = NULL;
+ kernel_siginfo_t *info = NULL;
+ enum pid_type *type = NULL;
+ int error __attribute__ ((unused));
+
+- error = dequeue_signal(task, mask, info, type);
++ error = dequeue_signal(mask, info, type);
+ ])
+ ])
+
+diff --git a/module/os/linux/spl/spl-thread.c b/module/os/linux/spl/spl-thread.c
+index 7f74d44f91ff..7b0ce30c7884 100644
+--- a/module/os/linux/spl/spl-thread.c
++++ b/module/os/linux/spl/spl-thread.c
+@@ -171,11 +171,11 @@ issig(void)
+ #if defined(HAVE_DEQUEUE_SIGNAL_4ARG)
+ enum pid_type __type;
+ if (dequeue_signal(current, &set, &__info, &__type) != 0) {
+-#elif defined(HAVE_DEQUEUE_SIGNAL_3ARG_TASK)
+- if (dequeue_signal(current, &set, &__info) != 0) {
+-#else
++#elif defined(HAVE_DEQUEUE_SIGNAL_3ARG_TYPE)
+ enum pid_type __type;
+ if (dequeue_signal(&set, &__info, &__type) != 0) {
++#else
++ if (dequeue_signal(current, &set, &__info) != 0) {
+ #endif
+ spin_unlock_irq(¤t->sighand->siglock);
+ kernel_signal_stop();
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/zfs.git/commitdiff/1d2c4ea649de3dbfd50a07ce2d764f8a2b4e21b6
More information about the pld-cvs-commit
mailing list