a77b606a5f
- update to current of upstream-branch openafs-stable-1_8_x - apply patches for 15.9: * 05b722d.diff 6348262.diff cc8edf7.diff - remove patches now in openafs-stable-1_8_x * fix_gcc_12_linux_5.18.diff OBS-URL: https://build.opensuse.org/request/show/997368 OBS-URL: https://build.opensuse.org/package/show/filesystems/openafs?expand=0&rev=92
116 lines
4.1 KiB
Diff
116 lines
4.1 KiB
Diff
From 05b722dd59ad2257986f9ab0739d03a1f4a76ee5 Mon Sep 17 00:00:00 2001
|
|
From: Cheyenne Wills <cwills@sinenomine.net>
|
|
Date: Tue, 05 Jul 2022 10:33:19 -0600
|
|
Subject: [PATCH] Linux-5.19: Remove flags from aops->write_begin
|
|
|
|
The Linux 5.19 commits:
|
|
|
|
fs: Remove aop flags parameter from grab_cache_page_write_begin()
|
|
(b7446e7c)
|
|
fs: Remove flags parameter from aops->write_begin (9d6b0cd7)
|
|
|
|
removed the flags parameter from the address space operations
|
|
'write_begin' as well as removing the flags parameter from the Linux
|
|
function 'grab_cache_page_write_begin'.
|
|
|
|
Add an autoconf test to see if grab_cache_page_write_begin takes 2 or
|
|
3 parameters. Use this as a test to determine if the address space
|
|
operations 'write_begin' takes a flags parameter.
|
|
|
|
Create a version of afs_linux_write_begin that does not take a flags
|
|
parameter, which also calls grab_cache_page_write_begin without flags.
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15041
|
|
Tested-by: BuildBot <buildbot@rampaginggeek.com>
|
|
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
|
|
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit 52d8df218ff27c139ede221ec4decf593610fc47)
|
|
|
|
Change-Id: I20575c2e9d0979749078f4e3d6f862900c6b6561
|
|
---
|
|
|
|
diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h
|
|
index 53a079b..9a080da 100644
|
|
--- a/src/afs/LINUX/osi_compat.h
|
|
+++ b/src/afs/LINUX/osi_compat.h
|
|
@@ -138,7 +138,9 @@
|
|
#define AOP_WRITEPAGE_ACTIVATE WRITEPAGE_ACTIVATE
|
|
#endif
|
|
|
|
-#if defined(STRUCT_ADDRESS_SPACE_OPERATIONS_HAS_WRITE_BEGIN) && !defined(HAVE_LINUX_GRAB_CACHE_PAGE_WRITE_BEGIN)
|
|
+#if defined(STRUCT_ADDRESS_SPACE_OPERATIONS_HAS_WRITE_BEGIN) && \
|
|
+ !defined(HAVE_LINUX_GRAB_CACHE_PAGE_WRITE_BEGIN_WITHFLAGS) && \
|
|
+ !defined(HAVE_LINUX_GRAB_CACHE_PAGE_WRITE_BEGIN_NOFLAGS)
|
|
static inline struct page *
|
|
grab_cache_page_write_begin(struct address_space *mapping, pgoff_t index,
|
|
unsigned int flags) {
|
|
diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
|
|
index 04f13a1..881d38e 100644
|
|
--- a/src/afs/LINUX/osi_vnodeops.c
|
|
+++ b/src/afs/LINUX/osi_vnodeops.c
|
|
@@ -3480,6 +3480,33 @@
|
|
return code;
|
|
}
|
|
|
|
+# if defined(HAVE_LINUX_GRAB_CACHE_PAGE_WRITE_BEGIN_NOFLAGS)
|
|
+static int
|
|
+afs_linux_write_begin(struct file *file, struct address_space *mapping,
|
|
+ loff_t pos, unsigned len,
|
|
+ struct page **pagep, void **fsdata)
|
|
+{
|
|
+ struct page *page;
|
|
+ pgoff_t index = pos >> PAGE_SHIFT;
|
|
+ unsigned int from = pos & (PAGE_SIZE - 1);
|
|
+ int code;
|
|
+
|
|
+ page = grab_cache_page_write_begin(mapping, index);
|
|
+ if (!page) {
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ *pagep = page;
|
|
+
|
|
+ code = afs_linux_prepare_write(file, page, from, from + len);
|
|
+ if (code) {
|
|
+ unlock_page(page);
|
|
+ put_page(page);
|
|
+ }
|
|
+
|
|
+ return code;
|
|
+}
|
|
+# else
|
|
static int
|
|
afs_linux_write_begin(struct file *file, struct address_space *mapping,
|
|
loff_t pos, unsigned len, unsigned flags,
|
|
@@ -3505,7 +3532,8 @@
|
|
|
|
return code;
|
|
}
|
|
-#endif
|
|
+# endif /* HAVE_LINUX_GRAB_CACHE_PAGE_WRITE_BEGIN_NOFLAGS */
|
|
+#endif /* STRUCT_ADDRESS_SPACE_OPERATIONS_HAS_WRITE_BEGIN */
|
|
|
|
#ifndef STRUCT_DENTRY_OPERATIONS_HAS_D_AUTOMOUNT
|
|
static void *
|
|
diff --git a/src/cf/linux-kernel-func.m4 b/src/cf/linux-kernel-func.m4
|
|
index cd4afe9..27a1d41 100644
|
|
--- a/src/cf/linux-kernel-func.m4
|
|
+++ b/src/cf/linux-kernel-func.m4
|
|
@@ -59,9 +59,14 @@
|
|
AC_CHECK_LINUX_FUNC([generic_file_aio_read],
|
|
[#include <linux/fs.h>],
|
|
[generic_file_aio_read(NULL,NULL,0,0);])
|
|
-AC_CHECK_LINUX_FUNC([grab_cache_page_write_begin],
|
|
+dnl - linux 5.19 removed the flags parameter, need to test
|
|
+dnl - with and without the flags parameter
|
|
+AC_CHECK_LINUX_FUNC([grab_cache_page_write_begin_withflags],
|
|
[#include <linux/pagemap.h>],
|
|
[grab_cache_page_write_begin(NULL, 0, 0);])
|
|
+AC_CHECK_LINUX_FUNC([grab_cache_page_write_begin_noflags],
|
|
+ [#include <linux/pagemap.h>],
|
|
+ [grab_cache_page_write_begin(NULL, 0);])
|
|
AC_CHECK_LINUX_FUNC([hlist_unhashed],
|
|
[#include <linux/list.h>],
|
|
[hlist_unhashed(0);])
|