diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h index 44bcb440ef..e8b8f100ed 100644 --- a/src/afs/LINUX/osi_compat.h +++ b/src/afs/LINUX/osi_compat.h @@ -31,6 +31,19 @@ # endif #endif +#if defined(HAVE_LINUX_NO_SETPAGEERROR) +static inline void +ClearPageError(struct page *p) +{ + return; +} +static inline void +SetPageError(struct page *p) +{ + return; +} +#endif + #if !defined(HAVE_LINUX_KTHREAD_COMPLETE_AND_EXIT) # define kthread_complete_and_exit complete_and_exit #endif diff --git a/src/afs/LINUX/osi_pagecopy.c b/src/afs/LINUX/osi_pagecopy.c index 42f5e38e03..061d8c640f 100644 --- a/src/afs/LINUX/osi_pagecopy.c +++ b/src/afs/LINUX/osi_pagecopy.c @@ -56,12 +56,16 @@ #include #include "afs/param.h" +#include "afs/sysincludes.h" +#include "afsincludes.h" + #include #include #include #include #include #include "osi_pagecopy.h" +#include "osi_compat.h" static DECLARE_WAIT_QUEUE_HEAD (afs_pagecopy_wq); static spinlock_t afs_pagecopy_lock; diff --git a/src/cf/linux-kernel-func.m4 b/src/cf/linux-kernel-func.m4 index 6bb9cd477b..539e304bb4 100644 --- a/src/cf/linux-kernel-func.m4 +++ b/src/cf/linux-kernel-func.m4 @@ -291,6 +291,22 @@ AC_CHECK_LINUX_FUNC([no_generic_file_splice_read], [[static char buff[10], *ap; ap = generic_file_splice_read(buff); ]]) +dnl Linux 6.12 removed the PG_error flag from the page flags along with the +dnl associated functions ClearPageError() and SetPageError(). Check to see if +dnl these functions are present in the kernel. +dnl +dnl To check if ClearPageError() and SetPageError() are missing, define our own +dnl functions with the same name but with a conflicting signature. If we can +dnl define them, the real functions must be missing. +AC_CHECK_LINUX_FUNC([no_setpageerror], + [[#include + #include + static inline char ClearPageError(char c) { return c;} + static inline char SetPageError(char c) { return c;}]], + [[static char r; + r = ClearPageError('x'); + r = SetPageError('x');]]) + dnl Consequences - things which get set as a result of the dnl above tests AS_IF([test "x$ac_cv_linux_func_d_alloc_anon" = "xno"],