From 05340388aa7c4f2eee1dd721a52c8c5349f5e716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= Date: Wed, 19 Jan 2022 21:10:49 +0100 Subject: [PATCH 1/3] Linux 5.17 compat: detect complete_and_exit() rename MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Linux 5.17 sees a rename from complete_and_exit() to kthread complete_and_exit() Upstream commit cead18552660702a4a46f58e65188fe5f36e9dfe ("exit: Rename complete_and_exit to kthread_complete_and_exit") Ref: http://build.zfsonlinux.org/builders/Kernel.org%20Built-in%20x86_64%20%28BUILD%29/builds/43905/steps/shell_1/logs/make Signed-off-by: Ahelenia Ziemiańska --- config/kernel-kthread.m4 | 27 +++++++++++++++++++++++++++ config/kernel.m4 | 2 ++ module/os/linux/spl/spl-thread.c | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 config/kernel-kthread.m4 diff --git a/config/kernel-kthread.m4 b/config/kernel-kthread.m4 new file mode 100644 index 000000000000..6459f831e799 --- /dev/null +++ b/config/kernel-kthread.m4 @@ -0,0 +1,27 @@ +AC_DEFUN([ZFS_AC_KERNEL_KTHREAD], [ + dnl # + dnl # 5.17 API, + dnl # cead18552660702a4a46f58e65188fe5f36e9dfe ("exit: Rename complete_and_exit to kthread_complete_and_exit") + dnl # + dnl # Also moves the definition from include/linux/kernel.h to include/linux/kthread.h + dnl # + AC_MSG_CHECKING([whether kthread_complete_and_exit() is available]) + ZFS_LINUX_TEST_RESULT([kthread_complete_and_exit], [ + AC_MSG_RESULT(yes) + AC_DEFINE(SPL_KTHREAD_COMPLETE_AND_EXIT, kthread_complete_and_exit, [kthread_complete_and_exit() available]) + ], [ + AC_MSG_RESULT(no) + AC_DEFINE(SPL_KTHREAD_COMPLETE_AND_EXIT, complete_and_exit, [using complete_and_exit() instead]) + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_SRC_KTHREAD], [ + ZFS_LINUX_TEST_SRC([kthread_complete_and_exit], [ + #include + ], [ + struct completion *completion = NULL; + long code = 0; + + kthread_complete_and_exit(completion, code); + ]) +]) diff --git a/config/kernel.m4 b/config/kernel.m4 index b3ed966b7264..1adec975c0bf 100644 --- a/config/kernel.m4 +++ b/config/kernel.m4 @@ -136,6 +136,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [ ZFS_AC_KERNEL_SRC_STANDALONE_LINUX_STDARG ZFS_AC_KERNEL_SRC_PAGEMAP_FOLIO_WAIT_BIT ZFS_AC_KERNEL_SRC_ADD_DISK + ZFS_AC_KERNEL_SRC_KTHREAD AC_MSG_CHECKING([for available kernel interfaces]) ZFS_LINUX_TEST_COMPILE_ALL([kabi]) @@ -245,6 +246,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [ ZFS_AC_KERNEL_STANDALONE_LINUX_STDARG ZFS_AC_KERNEL_PAGEMAP_FOLIO_WAIT_BIT ZFS_AC_KERNEL_ADD_DISK + ZFS_AC_KERNEL_KTHREAD ]) dnl # diff --git a/module/os/linux/spl/spl-thread.c b/module/os/linux/spl/spl-thread.c index 834c527117a3..0ba4c18c1659 100644 --- a/module/os/linux/spl/spl-thread.c +++ b/module/os/linux/spl/spl-thread.c @@ -66,7 +66,7 @@ void __thread_exit(void) { tsd_exit(); - complete_and_exit(NULL, 0); + SPL_KTHREAD_COMPLETE_AND_EXIT(NULL, 0); /* Unreachable */ } EXPORT_SYMBOL(__thread_exit); From 2c4b240f0e5480608bac01ca6568d1172cceac11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= Date: Wed, 19 Jan 2022 21:33:50 +0100 Subject: [PATCH 2/3] Linux 5.17 compat: dequeue_signal() takes a 4th argument MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Linux 5.17's dequeue_signal() takes an additional enum pid_type * output argument Upstream commit 5768d8906bc23d512b1a736c1e198aa833a6daa4 ("signal: Requeue signals in the appropriate queue") Ref: http://build.zfsonlinux.org/builders/Kernel.org%20Built-in%20x86_64%20%28BUILD%29/builds/43905/steps/shell_1/logs/make Signed-off-by: Ahelenia Ziemiańska --- config/kernel-kthread.m4 | 45 ++++++++++++++++++++++++++++++-- module/os/linux/spl/spl-thread.c | 5 ++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/config/kernel-kthread.m4 b/config/kernel-kthread.m4 index 6459f831e799..f5b824d7947a 100644 --- a/config/kernel-kthread.m4 +++ b/config/kernel-kthread.m4 @@ -1,4 +1,4 @@ -AC_DEFUN([ZFS_AC_KERNEL_KTHREAD], [ +AC_DEFUN([ZFS_AC_KERNEL_KTHREAD_COMPLETE_AND_EXIT], [ dnl # dnl # 5.17 API, dnl # cead18552660702a4a46f58e65188fe5f36e9dfe ("exit: Rename complete_and_exit to kthread_complete_and_exit") @@ -15,7 +15,24 @@ AC_DEFUN([ZFS_AC_KERNEL_KTHREAD], [ ]) ]) -AC_DEFUN([ZFS_AC_KERNEL_SRC_KTHREAD], [ +AC_DEFUN([ZFS_AC_KERNEL_KTHREAD_DEQUEUE_SIGNAL_4ARG], [ + dnl # + dnl # 5.17 API: enum pid_type * as new 4th dequeue_signal() argument, + dnl # 5768d8906bc23d512b1a736c1e198aa833a6daa4 ("signal: Requeue signals in the appropriate queue") + 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 # + AC_MSG_CHECKING([whether dequeue_signal() takes 4 arguments]) + ZFS_LINUX_TEST_RESULT([kthread_dequeue_signal], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_DEQUEUE_SIGNAL_4ARG, 1, [dequeue_signal() takes 4 arguments]) + ], [ + AC_MSG_RESULT(no) + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_SRC_KTHREAD_COMPLETE_AND_EXIT], [ ZFS_LINUX_TEST_SRC([kthread_complete_and_exit], [ #include ], [ @@ -25,3 +42,27 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_KTHREAD], [ kthread_complete_and_exit(completion, code); ]) ]) + +AC_DEFUN([ZFS_AC_KERNEL_SRC_KTHREAD_DEQUEUE_SIGNAL_4ARG], [ + ZFS_LINUX_TEST_SRC([kthread_dequeue_signal], [ + #include + ], [ + 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); + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_KTHREAD], [ + ZFS_AC_KERNEL_KTHREAD_COMPLETE_AND_EXIT + ZFS_AC_KERNEL_KTHREAD_DEQUEUE_SIGNAL_4ARG +]) + +AC_DEFUN([ZFS_AC_KERNEL_SRC_KTHREAD], [ + ZFS_AC_KERNEL_SRC_KTHREAD_COMPLETE_AND_EXIT + ZFS_AC_KERNEL_SRC_KTHREAD_DEQUEUE_SIGNAL_4ARG +]) diff --git a/module/os/linux/spl/spl-thread.c b/module/os/linux/spl/spl-thread.c index 0ba4c18c1659..16d2ca1b133b 100644 --- a/module/os/linux/spl/spl-thread.c +++ b/module/os/linux/spl/spl-thread.c @@ -188,7 +188,12 @@ issig(int why) spin_lock_irq(&task->sighand->siglock); int ret; +#ifdef HAVE_DEQUEUE_SIGNAL_4ARG + enum pid_type __type; + if ((ret = dequeue_signal(task, &set, &__info, &__type)) != 0) { +#else if ((ret = dequeue_signal(task, &set, &__info)) != 0) { +#endif #ifdef HAVE_SIGNAL_STOP spin_unlock_irq(&task->sighand->siglock); kernel_signal_stop(); From c76d51e711ee5076216e3f525fe566fdd6abe877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= Date: Mon, 24 Jan 2022 20:11:07 +0100 Subject: [PATCH 3/3] Linux 5.17 compat: PDE_DATA() renamed to pde_data() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upstream commit 359745d78351c6f5442435f81549f0207ece28aa ("proc: remove PDE_DATA() completely") Link: https://lore.kernel.org/all/20211124081956.87711-2-songmuchun@bytedance.com/T/#u Closes: #13004 Signed-off-by: Ahelenia Ziemiańska --- config/kernel-pde-data.m4 | 16 +++++++++------- module/os/linux/spl/spl-kstat.c | 2 +- module/os/linux/spl/spl-procfs-list.c | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/config/kernel-pde-data.m4 b/config/kernel-pde-data.m4 index f866d77a11df..4fc665dfbe2e 100644 --- a/config/kernel-pde-data.m4 +++ b/config/kernel-pde-data.m4 @@ -1,20 +1,22 @@ dnl # -dnl # 3.10 API change, -dnl # PDE is replaced by PDE_DATA +dnl # 5.17 API: PDE_DATA() renamed to pde_data(), +dnl # 359745d78351c6f5442435f81549f0207ece28aa ("proc: remove PDE_DATA() completely") dnl # AC_DEFUN([ZFS_AC_KERNEL_SRC_PDE_DATA], [ ZFS_LINUX_TEST_SRC([pde_data], [ #include ], [ - PDE_DATA(NULL); + pde_data(NULL); ]) ]) AC_DEFUN([ZFS_AC_KERNEL_PDE_DATA], [ - AC_MSG_CHECKING([whether PDE_DATA() is available]) - ZFS_LINUX_TEST_RESULT_SYMBOL([pde_data], [PDE_DATA], [], [ + AC_MSG_CHECKING([whether pde_data() is lowercase]) + ZFS_LINUX_TEST_RESULT([pde_data], [ AC_MSG_RESULT(yes) - ],[ - ZFS_LINUX_TEST_ERROR([PDE_DATA]) + AC_DEFINE(SPL_PDE_DATA, pde_data, [pde_data() is pde_data()]) + ], [ + AC_MSG_RESULT(no) + AC_DEFINE(SPL_PDE_DATA, PDE_DATA, [pde_data() is PDE_DATA()]) ]) ]) diff --git a/module/os/linux/spl/spl-kstat.c b/module/os/linux/spl/spl-kstat.c index a417d4d7c358..c6d3c8f4413f 100644 --- a/module/os/linux/spl/spl-kstat.c +++ b/module/os/linux/spl/spl-kstat.c @@ -418,7 +418,7 @@ proc_kstat_open(struct inode *inode, struct file *filp) return (rc); f = filp->private_data; - f->private = PDE_DATA(inode); + f->private = SPL_PDE_DATA(inode); return (0); } diff --git a/module/os/linux/spl/spl-procfs-list.c b/module/os/linux/spl/spl-procfs-list.c index 1922825c94a8..81501460f04f 100644 --- a/module/os/linux/spl/spl-procfs-list.c +++ b/module/os/linux/spl/spl-procfs-list.c @@ -175,7 +175,7 @@ procfs_list_open(struct inode *inode, struct file *filp) struct seq_file *f = filp->private_data; procfs_list_cursor_t *cursor = f->private; - cursor->procfs_list = PDE_DATA(inode); + cursor->procfs_list = SPL_PDE_DATA(inode); cursor->cached_node = NULL; cursor->cached_pos = 0;