commit 1d2c4ea649de3dbfd50a07ce2d764f8a2b4e21b6 Author: Jan Rękorajski <bagg...@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 <r...@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 <ya...@info2soft.com> +Reviewed-by: Brian Behlendorf <behlendo...@llnl.gov> +Signed-off-by: Rob Norris <r...@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 _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit