From 95a8c71f80e6d0aa83297fedf9f808ee01c32623 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Thu, 28 Jan 2021 16:59:47 -0600 Subject: [PATCH 06/11] LINUX: Fix includes for fatal_signal_pending test Commit 8b6ae289 (LINUX: Avoid lookup ENOENT on fatal signals) added a configure test for fatal_signal_pending(). However, this check fails incorrectly ever since Linux 4.11, because fatal_signal_pending() was moved from linux/sched.h to linux/sched/signal.h in Linux commit 2a1f062a (sched/headers: Move signal wakeup [...]). Fix this by including linux/sched/signal.h if we have it during the configure test. A false negative on this configure test doesn't break the build, but it disables one of our safeguards preventing incorrect negative dentries at runtime. The function fatal_signal_pending() hasn't changed in quite some time (except for what header it lives in); it was introduced in Linux 2.6.25 via Linux commit f776d12d (Add fatal_signal_pending). So to try to avoid this mistake again in the future, make it so a missing fatal_signal_pending() breaks the build if we're on Linux 2.6.25+. Reviewed-on: https://gerrit.openafs.org/14508 Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 0c1465e4f3310daa54f1e799f76237604222666d) Change-Id: I1334c060f8ab5733461ebf7c191dffa7be830021 Reviewed-on: https://gerrit.openafs.org/14509 Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Stephan Wiesand --- src/afs/LINUX/osi_vnodeops.c | 2 ++ src/cf/linux-kernel-func.m4 | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index ba4f1e6af..4d0f55c95 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -1206,6 +1206,8 @@ filter_enoent(int code) if (code == ENOENT && fatal_signal_pending(current)) { return EINTR; } +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25) +# error fatal_signal_pending not available, but it should be #endif return code; } diff --git a/src/cf/linux-kernel-func.m4 b/src/cf/linux-kernel-func.m4 index 11d071806..e45a30540 100644 --- a/src/cf/linux-kernel-func.m4 +++ b/src/cf/linux-kernel-func.m4 @@ -42,8 +42,13 @@ AC_CHECK_LINUX_FUNC([d_make_root], AC_CHECK_LINUX_FUNC([do_sync_read], [#include ], [do_sync_read(NULL, NULL, 0, NULL);]) +dnl - fatal_signal_pending introduced in 2.6.25 +dnl - moved from linux/sched.h to linux/sched/signal.h in 4.11 AC_CHECK_LINUX_FUNC([fatal_signal_pending], - [#include ], + [#include + #ifdef HAVE_LINUX_SCHED_SIGNAL_H + # include + #endif], [fatal_signal_pending(NULL);]) AC_CHECK_LINUX_FUNC([file_dentry], [#include ], -- 2.31.1