1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
From d99f2503dd0b8317cf7170a9e00263796d88ee26 Mon Sep 17 00:00:00 2001
From: Cheyenne Wills <cwills@sinenomine.net>
Date: Thu, 31 Jul 2025 09:03:10 -0600
Subject: [PATCH 15/18] Linux: Rename page->index to page->__folio_index
The Linux 6.16 commit:
'mm: rename page->index to page->__folio_index' (acc53a0b4c156)
simply renamed the field.
Add a autoconf test for page->__folio_index.
Create a getter wrapper function, afs_page_index(), that returns
page->__folio_index/page->index.
Update code that references the page->index with afs_page_index().
Note: Older code that is not conditionally not built for Linux 6.16
(e.g. afs_linux_bypass_readpages and afs_linux_readpages) was not
updated to use the wrapper.
Reviewed-on: https://gerrit.openafs.org/16439
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
(cherry picked from commit 24fdeefe16688d6a5cb7499a22df49d2c5ff9011)
Change-Id: Ide2f3a6513a006887db2cc6d7fdef2df33dec347
---
src/afs/LINUX/osi_compat.h | 12 ++++++++++++
src/afs/LINUX/osi_vnodeops.c | 6 +++---
src/cf/linux-kernel-struct.m4 | 3 +++
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h
index 31687d02e..8a53d3487 100644
--- a/src/afs/LINUX/osi_compat.h
+++ b/src/afs/LINUX/osi_compat.h
@@ -310,6 +310,18 @@ afs_linux_cred_is_current(afs_ucred_t *cred)
}
#endif
+/* Folio / Page wrappers */
+
+static inline pgoff_t
+afs_page_index(struct page *p)
+{
+#if defined(STRUCT_PAGE_HAS___FOLIO_INDEX)
+ return p->__folio_index;
+#else
+ return p->index;
+#endif
+}
+
#ifndef HAVE_LINUX_PAGE_OFFSET
static inline loff_t
page_offset(struct page *pp)
diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
index 10c03091d..c5c7b2f09 100644
--- a/src/afs/LINUX/osi_vnodeops.c
+++ b/src/afs/LINUX/osi_vnodeops.c
@@ -2756,7 +2756,7 @@ afs_linux_bypass_readahead(struct readahead_control *rac)
}
isize = (i_size_read(fp->f_mapping->host) - 1) >> PAGE_SHIFT;
- if (pp->index > isize) {
+ if (afs_page_index(pp) > isize) {
if (afs_FolioLocked(pp)) {
afs_unlock_folio(pp);
}
@@ -2767,10 +2767,10 @@ afs_linux_bypass_readahead(struct readahead_control *rac)
if (page_ix == 0) {
offset = page_offset(pp);
ancr->offset = ancr->auio->uio_offset = offset;
- base_index = pp->index;
+ base_index = afs_page_index(pp);
}
iovecp[page_ix].iov_len = PAGE_SIZE;
- if (base_index != pp->index) {
+ if (base_index != afs_page_index(pp)) {
if (afs_FolioLocked(pp)) {
afs_unlock_folio(pp);
}
diff --git a/src/cf/linux-kernel-struct.m4 b/src/cf/linux-kernel-struct.m4
index 5cd346fb5..24841e9f3 100644
--- a/src/cf/linux-kernel-struct.m4
+++ b/src/cf/linux-kernel-struct.m4
@@ -60,6 +60,9 @@ AC_CHECK_LINUX_STRUCT([task_struct], [sigmask_lock], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [tgid], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [thread_info], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [total_link_count], [sched.h])
+dnl Linux 6.16 changed page.index to page.__folio_index;
+AC_CHECK_LINUX_STRUCT([page], [__folio_index], [mm_types.h])
+
LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGNAL_RLIM
dnl Check for typed structure elements
--
2.51.0
|