diff --git a/config/kernel-timer.m4 b/config/kernel-timer.m4 new file mode 100644 index 000000000..c89ea204e --- /dev/null +++ b/config/kernel-timer.m4 @@ -0,0 +1,32 @@ +dnl # +dnl # 6.2: timer_delete_sync introduced, del_timer_sync deprecated and made +dnl # into a simple wrapper +dnl # 6.15: del_timer_sync removed +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SRC_TIMER_DELETE_SYNC], [ + ZFS_LINUX_TEST_SRC([timer_delete_sync], [ + #include + ],[ + struct timer_list *timer __attribute__((unused)) = NULL; + timer_delete_sync(timer); + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_TIMER_DELETE_SYNC], [ + AC_MSG_CHECKING([whether timer_delete_sync() is available]) + ZFS_LINUX_TEST_RESULT([timer_delete_sync], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TIMER_DELETE_SYNC, 1, + [timer_delete_sync is available]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_SRC_TIMER], [ + ZFS_AC_KERNEL_SRC_TIMER_DELETE_SYNC +]) + +AC_DEFUN([ZFS_AC_KERNEL_TIMER], [ + ZFS_AC_KERNEL_TIMER_DELETE_SYNC +]) diff --git a/config/kernel.m4 b/config/kernel.m4 index 29bf58868..b933475e9 100644 --- a/config/kernel.m4 +++ b/config/kernel.m4 @@ -130,6 +130,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [ ZFS_AC_KERNEL_SRC_MM_PAGE_MAPPING ZFS_AC_KERNEL_SRC_FILE ZFS_AC_KERNEL_SRC_PIN_USER_PAGES + ZFS_AC_KERNEL_SRC_TIMER case "$host_cpu" in powerpc*) ZFS_AC_KERNEL_SRC_CPU_HAS_FEATURE @@ -244,6 +245,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [ ZFS_AC_KERNEL_1ARG_ASSIGN_STR ZFS_AC_KERNEL_FILE ZFS_AC_KERNEL_PIN_USER_PAGES + ZFS_AC_KERNEL_TIMER case "$host_cpu" in powerpc*) ZFS_AC_KERNEL_CPU_HAS_FEATURE diff --git a/module/os/linux/spl/spl-taskq.c b/module/os/linux/spl/spl-taskq.c index d5b42fdfa..700ec1c7f 100644 --- a/module/os/linux/spl/spl-taskq.c +++ b/module/os/linux/spl/spl-taskq.c @@ -38,6 +38,11 @@ #include #include +/* Linux 6.2 renamed timer_delete_sync(); point it at its old name for those. */ +#ifndef HAVE_TIMER_DELETE_SYNC +#define timer_delete_sync(t) del_timer_sync(t) +#endif + typedef struct taskq_kstats { /* static values, for completeness */ kstat_named_t tqks_threads_max; @@ -633,7 +638,7 @@ taskq_cancel_id(taskq_t *tq, taskqid_t id) */ if (timer_pending(&t->tqent_timer)) { spin_unlock_irqrestore(&tq->tq_lock, flags); - del_timer_sync(&t->tqent_timer); + timer_delete_sync(&t->tqent_timer); spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); }