aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/kernel-mm-page-size.m417
-rw-r--r--config/kernel-mm-pagemap.m436
-rw-r--r--config/kernel.m42
-rw-r--r--include/os/linux/kernel/linux/mm_compat.h7
-rw-r--r--module/os/linux/zfs/zfs_vnops_os.c1
5 files changed, 46 insertions, 17 deletions
diff --git a/config/kernel-mm-page-size.m4 b/config/kernel-mm-page-size.m4
deleted file mode 100644
index d5ebd9269..000000000
--- a/config/kernel-mm-page-size.m4
+++ /dev/null
@@ -1,17 +0,0 @@
-AC_DEFUN([ZFS_AC_KERNEL_SRC_MM_PAGE_SIZE], [
- ZFS_LINUX_TEST_SRC([page_size], [
- #include <linux/mm.h>
- ],[
- unsigned long s;
- s = page_size(NULL);
- ])
-])
-AC_DEFUN([ZFS_AC_KERNEL_MM_PAGE_SIZE], [
- AC_MSG_CHECKING([whether page_size() is available])
- ZFS_LINUX_TEST_RESULT([page_size], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_MM_PAGE_SIZE, 1, [page_size() is available])
- ],[
- AC_MSG_RESULT(no)
- ])
-])
diff --git a/config/kernel-mm-pagemap.m4 b/config/kernel-mm-pagemap.m4
new file mode 100644
index 000000000..466b6fa07
--- /dev/null
+++ b/config/kernel-mm-pagemap.m4
@@ -0,0 +1,36 @@
+AC_DEFUN([ZFS_AC_KERNEL_SRC_MM_PAGE_SIZE], [
+ ZFS_LINUX_TEST_SRC([page_size], [
+ #include <linux/mm.h>
+ ],[
+ unsigned long s;
+ s = page_size(NULL);
+ ])
+])
+AC_DEFUN([ZFS_AC_KERNEL_MM_PAGE_SIZE], [
+ AC_MSG_CHECKING([whether page_size() is available])
+ ZFS_LINUX_TEST_RESULT([page_size], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MM_PAGE_SIZE, 1, [page_size() is available])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+
+
+AC_DEFUN([ZFS_AC_KERNEL_SRC_MM_PAGE_MAPPING], [
+ ZFS_LINUX_TEST_SRC([page_mapping], [
+ #include <linux/pagemap.h>
+ ],[
+ struct page *p = NULL;
+ struct address_space *m = page_mapping(NULL);
+ ])
+])
+AC_DEFUN([ZFS_AC_KERNEL_MM_PAGE_MAPPING], [
+ AC_MSG_CHECKING([whether page_mapping() is available])
+ ZFS_LINUX_TEST_RESULT([page_mapping], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MM_PAGE_MAPPING, 1, [page_mapping() is available])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
diff --git a/config/kernel.m4 b/config/kernel.m4
index 209dbf42f..2654eccb7 100644
--- a/config/kernel.m4
+++ b/config/kernel.m4
@@ -170,6 +170,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
ZFS_AC_KERNEL_SRC_COPY_SPLICE_READ
ZFS_AC_KERNEL_SRC_SYNC_BDEV
ZFS_AC_KERNEL_SRC_MM_PAGE_SIZE
+ ZFS_AC_KERNEL_SRC_MM_PAGE_MAPPING
case "$host_cpu" in
powerpc*)
ZFS_AC_KERNEL_SRC_CPU_HAS_FEATURE
@@ -322,6 +323,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
ZFS_AC_KERNEL_COPY_SPLICE_READ
ZFS_AC_KERNEL_SYNC_BDEV
ZFS_AC_KERNEL_MM_PAGE_SIZE
+ ZFS_AC_KERNEL_MM_PAGE_MAPPING
case "$host_cpu" in
powerpc*)
ZFS_AC_KERNEL_CPU_HAS_FEATURE
diff --git a/include/os/linux/kernel/linux/mm_compat.h b/include/os/linux/kernel/linux/mm_compat.h
index 40056c68d..817f6df42 100644
--- a/include/os/linux/kernel/linux/mm_compat.h
+++ b/include/os/linux/kernel/linux/mm_compat.h
@@ -21,16 +21,23 @@
/*
* Copyright (c) 2023, 2024, Klara Inc.
+ * Copyright (c) 2024, Rob Norris <[email protected]>
*/
#ifndef _ZFS_MM_COMPAT_H
#define _ZFS_MM_COMPAT_H
#include <linux/mm.h>
+#include <linux/pagemap.h>
/* 5.4 introduced page_size(). Older kernels can use a trivial macro instead */
#ifndef HAVE_MM_PAGE_SIZE
#define page_size(p) ((unsigned long)(PAGE_SIZE << compound_order(p)))
#endif
+/* 6.11 removed page_mapping(). A simple wrapper around folio_mapping() works */
+#ifndef HAVE_MM_PAGE_MAPPING
+#define page_mapping(p) folio_mapping(page_folio(p))
+#endif
+
#endif /* _ZFS_MM_COMPAT_H */
diff --git a/module/os/linux/zfs/zfs_vnops_os.c b/module/os/linux/zfs/zfs_vnops_os.c
index be528f6e8..fb871ed8c 100644
--- a/module/os/linux/zfs/zfs_vnops_os.c
+++ b/module/os/linux/zfs/zfs_vnops_os.c
@@ -69,6 +69,7 @@
#include <sys/zpl.h>
#include <sys/zil.h>
#include <sys/sa_impl.h>
+#include <linux/mm_compat.h>
/*
* Programming rules.