SHA256
1
0
forked from pool/openafs
openafs/cc8edf7.diff
Christof Hanke a77b606a5f Accepting request 997368 from home:hauky:branches:filesystems
- 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
2022-08-16 13:16:31 +00:00

100 lines
2.9 KiB
Diff

From cc8edf7f9b75a2114ef6c7f003456b5515cbaaf5 Mon Sep 17 00:00:00 2001
From: Cheyenne Wills <cwills@sinenomine.net>
Date: Tue, 05 Jul 2022 10:28:10 -0600
Subject: [PATCH] Linux: Introduce file mapping readpage helpers
Create a helper function that determines if a file's
i_mapping->a_ops->readpage
is NULL.
Create a helper function that calls a file's
i_mapping->a_ops->readpage
There are no functional changes with this commit.
Note: This commit isolates references to 'readpage' so that future
commits can change the name in a more straight forward manner.
Reviewed-on: https://gerrit.openafs.org/15039
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit a81f7300f08d6e515adbde4bce4b72a3102b60f9)
Change-Id: I9268fd2622ecd48ad6971a8faaeefef8128f4024
---
diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
index 5411863..b834a40 100644
--- a/src/afs/LINUX/osi_vnodeops.c
+++ b/src/afs/LINUX/osi_vnodeops.c
@@ -2206,6 +2206,18 @@
#endif /* USABLE_KERNEL_PAGE_SYMLINK_CACHE */
+/*
+ * Call the mapping function that reads data for a given page.
+ * Note: When we return, it is expected that the page is unlocked. It is the
+ * responsibility of the called function (e.g. ->readpage) to unlock the given
+ * page, even when an error occurs.
+ */
+static int
+mapping_read_page(struct address_space *mapping, struct page *page)
+{
+ return mapping->a_ops->readpage(NULL, page);
+}
+
/* Populate a page by filling it from the cache file pointed at by cachefp
* (which contains indicated chunk)
* If task is NULL, the page copy occurs syncronously, and the routine
@@ -2272,9 +2284,9 @@
if (!PageUptodate(cachepage)) {
ClearPageError(cachepage);
- /* Note that ->readpage always handles unlocking the given page, even
- * when an error is returned. */
- code = cachemapping->a_ops->readpage(NULL, cachepage);
+ /* Note that mapping_read_page always handles unlocking the given page,
+ * even when an error is returned. */
+ code = mapping_read_page(cachemapping, cachepage);
if (!code && !task) {
wait_on_page_locked(cachepage);
}
@@ -2306,6 +2318,17 @@
put_page(cachepage);
return code;
+}
+
+/*
+ * Return true if the file has a mapping that can read pages
+ */
+static int inline
+file_can_read_pages(struct file *fp)
+{
+ if (fp->f_dentry->d_inode->i_mapping->a_ops->readpage != NULL)
+ return 1;
+ return 0;
}
static int inline
@@ -2403,7 +2426,8 @@
AFS_GLOCK();
goto out;
}
- if (!cacheFp->f_dentry->d_inode->i_mapping->a_ops->readpage) {
+
+ if (!file_can_read_pages(cacheFp)) {
cachefs_noreadpage = 1;
AFS_GLOCK();
goto out;
@@ -2871,7 +2895,7 @@
code = -1;
goto out;
}
- if (cacheFp->f_dentry->d_inode->i_mapping->a_ops->readpage == NULL) {
+ if (!file_can_read_pages(cacheFp)) {
cachefs_noreadpage = 1;
/* No mapping function */
code = -1;