summarylogtreecommitdiffstats
path: root/0006-Linux-Use-folio_wait_locked.patch
blob: 8631b4a35b296b5e489e58aef95e7880fe717700 (plain)
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
From e3f707e67f0a185ae2ad1b6b6339400ce47f17cb Mon Sep 17 00:00:00 2001
From: Cheyenne Wills <cwills@sinenomine.net>
Date: Fri, 9 May 2025 14:59:49 -0600
Subject: [PATCH 06/10] Linux: Use folio_wait_locked()

The Linux 6.15 commit:
    mm: Remove wait_on_page_locked() (d96e2802a802)
removed the compatibility wrapper wait_on_page_locked().  The
replacement is folio_wait_locked()

Since the code is now dealing with folios, replace the put_page()
with a folio_put() for the folio that was waited for.

Change-Id: Ic829c40e03ea4df6b3098f2009bf460bae2cd02e
---
 src/afs/LINUX/osi_pagecopy.c |  5 +++++
 src/afs/LINUX/osi_vnodeops.c | 11 ++++++++++-
 src/cf/linux-kernel-func.m4  |  6 ++++++
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/afs/LINUX/osi_pagecopy.c b/src/afs/LINUX/osi_pagecopy.c
index 061d8c640..bc1fa55ff 100644
--- a/src/afs/LINUX/osi_pagecopy.c
+++ b/src/afs/LINUX/osi_pagecopy.c
@@ -228,8 +228,13 @@ static int afs_pagecopy_thread(void *unused) {
 	for (;;) {
 	    sleeppage = afs_pagecopy_checkworkload();
 	    if (sleeppage) {
+#if defined(HAVE_LINUX_FOLIO_WAIT_LOCKED)
+		folio_wait_locked(page_folio(sleeppage));
+		folio_put(page_folio(sleeppage));
+#else
 		wait_on_page_locked(sleeppage);
 		put_page(sleeppage);
+#endif
 	    } else {
 		break;
 	    }
diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
index b530a04e9..7e26a69cb 100644
--- a/src/afs/LINUX/osi_vnodeops.c
+++ b/src/afs/LINUX/osi_vnodeops.c
@@ -2441,7 +2441,11 @@ afs_linux_read_cache(struct file *cachefp, struct page *page,
 	 * even when an error is returned. */
 	code = mapping_read_page(cachemapping, cachepage);
 	if (!code && !task) {
+#if defined(HAVE_LINUX_FOLIO_WAIT_LOCKED)
+	    folio_wait_locked(page_folio(cachepage));
+#else
 	    wait_on_page_locked(cachepage);
+#endif
 	}
     } else {
         unlock_page(cachepage);
@@ -2467,8 +2471,13 @@ afs_linux_read_cache(struct file *cachefp, struct page *page,
         unlock_page(page);
     }
 
-    if (cachepage)
+    if (cachepage != NULL) {
+#if defined(HAVE_LINUX_FOLIO_WAIT)
+	folio_put(page_folio(cachepage));
+#else
 	put_page(cachepage);
+#endif
+}
 
     return code;
 }
diff --git a/src/cf/linux-kernel-func.m4 b/src/cf/linux-kernel-func.m4
index eebd49888..2770ba546 100644
--- a/src/cf/linux-kernel-func.m4
+++ b/src/cf/linux-kernel-func.m4
@@ -336,6 +336,12 @@ AC_CHECK_LINUX_FUNC([filemap_get_folio],
                       static struct folio *folio;]],
                     [[folio = __filemap_get_folio(NULL, 0, 0, 0);]])
 
+dnl check to see if write_on_page_locked exists
+AC_CHECK_LINUX_FUNC([folio_wait_locked],
+		    [[#include <linux/pagemap.h>
+		      #include <linux/fs.h>]],
+		    [[folio_wait_locked(NULL);]])
+
 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"],
-- 
2.49.0