summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO14
-rw-r--r--0002-libafs-Abstract-the-Linux-lru-cache-interface.patch238
-rw-r--r--0003-LINUX-5.7-replace-__pagevec_lru_add-with-lru_cache_a.patch144
-rw-r--r--PKGBUILD18
4 files changed, 10 insertions, 404 deletions
diff --git a/.SRCINFO b/.SRCINFO
index ff5a94d2a91f..779d1a8d9747 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = openafs-modules-dkms
pkgdesc = Kernel module for OpenAFS (dkms)
- pkgver = 1.8.6pre2
- pkgrel = 2
+ pkgver = 1.8.6pre3
+ pkgrel = 1
url = http://www.openafs.org
arch = i686
arch = x86_64
@@ -10,21 +10,17 @@ pkgbase = openafs-modules-dkms
depends = dkms
depends = libelf
depends = openafs
- provides = openafs-modules=1.8.6pre2
+ provides = openafs-modules=1.8.6pre3
conflicts = openafs-features-libafs
conflicts = openafs-modules
conflicts = openafs<1.6.6-2
options = !emptydirs
- source = http://openafs.org/dl/openafs/candidate/1.8.6pre2/openafs-1.8.6pre2-src.tar.bz2
+ source = http://openafs.org/dl/openafs/candidate/1.8.6pre3/openafs-1.8.6pre3-src.tar.bz2
source = dkms.conf
source = 0001-Temporary-fix-for-compilation-with-GCC-10.patch
- source = 0002-libafs-Abstract-the-Linux-lru-cache-interface.patch
- source = 0003-LINUX-5.7-replace-__pagevec_lru_add-with-lru_cache_a.patch
- sha256sums = ae1aa62c977fc13d61df1f9822ff75af301c50f8ff0528c8fd1f2914fffafcf5
+ sha256sums = 9477ac1674bf75553f268d4ee36725c9fde731f5c5e5d26aa96b089cc6b721a8
sha256sums = 5ea5e184f9b44f5ed45817d2b5a10149d15c8c54f49e0b5b4b773652673cb9b0
sha256sums = b067b59bf856d15ded1ee786d303eb7b7ff47edb5b3e078b1d43862b8db62368
- sha256sums = 22d94f69864cde0027716e8bb251406b9fe3745aa6b0f8a16fcb94748e8c3925
- sha256sums = dec56eff34fd1ea492a12d90558edfd4a46b82f203f6e7a1fd7543eb1fb0bc99
pkgname = openafs-modules-dkms
diff --git a/0002-libafs-Abstract-the-Linux-lru-cache-interface.patch b/0002-libafs-Abstract-the-Linux-lru-cache-interface.patch
deleted file mode 100644
index bc1aeae0fc4b..000000000000
--- a/0002-libafs-Abstract-the-Linux-lru-cache-interface.patch
+++ /dev/null
@@ -1,238 +0,0 @@
-From 0aa55a7c8cb44837fb6d8d41a5902b9ca7baab95 Mon Sep 17 00:00:00 2001
-From: Cheyenne Wills <cwills@sinenomine.net>
-Date: Fri, 15 May 2020 10:39:53 -0600
-Subject: [PATCH 2/3] libafs: Abstract the Linux lru cache interface
-
-Define static functions afs_lru_cache_init, afs_lru_cache_add and
-afs_lru_cache_finalize to handle interfacing with Linux's lru
-facilities.
-
-This change's primary purpose is to isolate the preprocessor
-conditionals associated with the details of the system lru interfaces to
-just these functions and to simplify the areas that utilize lru caching
-by removing the preprocessor conditionals.
-
-As Linux's lru facilities change, additional conditional code will be
-needed.
-
-Reviewed-on: https://gerrit.openafs.org/14167
-Reviewed-by: Andrew Deason <adeason@sinenomine.net>
-Tested-by: BuildBot <buildbot@rampaginggeek.com>
-Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
-(cherry picked from commit dca95bcb7efdff38564dcff3e8f4189735f13b3a)
-
-Change-Id: I863bbc9bb578716c42fdf34672ec8ad85f05ea31
----
- src/afs/LINUX/osi_vnodeops.c | 101 ++++++++++++++++++-----------------
- 1 file changed, 53 insertions(+), 48 deletions(-)
-
-diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
-index 03635212c..96d7a2e33 100644
---- a/src/afs/LINUX/osi_vnodeops.c
-+++ b/src/afs/LINUX/osi_vnodeops.c
-@@ -39,10 +39,6 @@
- #include "osi_compat.h"
- #include "osi_pagecopy.h"
-
--#ifndef HAVE_LINUX_PAGEVEC_LRU_ADD_FILE
--#define __pagevec_lru_add_file __pagevec_lru_add
--#endif
--
- #ifndef MAX_ERRNO
- #define MAX_ERRNO 1000L
- #endif
-@@ -69,6 +65,41 @@ extern struct backing_dev_info *afs_backing_dev_info;
-
- extern struct vcache *afs_globalVp;
-
-+/* Handle interfacing with Linux's pagevec/lru facilities */
-+
-+struct afs_lru_pages {
-+ struct pagevec lrupv;
-+};
-+
-+static inline void
-+afs_lru_cache_init(struct afs_lru_pages *alrupages)
-+{
-+#if defined(PAGEVEC_INIT_COLD_ARG)
-+ pagevec_init(&alrupages->lrupv, 0);
-+#else
-+ pagevec_init(&alrupages->lrupv);
-+#endif
-+}
-+
-+#ifndef HAVE_LINUX_PAGEVEC_LRU_ADD_FILE
-+# define __pagevec_lru_add_file __pagevec_lru_add
-+#endif
-+
-+static inline void
-+afs_lru_cache_add(struct afs_lru_pages *alrupages, struct page *page)
-+{
-+ get_page(page);
-+ if (!pagevec_add(&alrupages->lrupv, page))
-+ __pagevec_lru_add_file(&alrupages->lrupv);
-+}
-+
-+static inline void
-+afs_lru_cache_finalize(struct afs_lru_pages *alrupages)
-+{
-+ if (pagevec_count(&alrupages->lrupv))
-+ __pagevec_lru_add_file(&alrupages->lrupv);
-+}
-+
- /* This function converts a positive error code from AFS into a negative
- * code suitable for passing into the Linux VFS layer. It checks that the
- * error code is within the permissable bounds for the ERR_PTR mechanism.
-@@ -2093,7 +2124,7 @@ afs_linux_put_link(struct dentry *dentry, struct nameidata *nd)
- */
- static int
- afs_linux_read_cache(struct file *cachefp, struct page *page,
-- int chunk, struct pagevec *lrupv,
-+ int chunk, struct afs_lru_pages *alrupages,
- struct afs_pagecopy_task *task) {
- loff_t offset = page_offset(page);
- struct inode *cacheinode = cachefp->f_dentry->d_inode;
-@@ -2135,11 +2166,7 @@ afs_linux_read_cache(struct file *cachefp, struct page *page,
- if (code == 0) {
- cachepage = newpage;
- newpage = NULL;
--
-- get_page(cachepage);
-- if (!pagevec_add(lrupv, cachepage))
-- __pagevec_lru_add_file(lrupv);
--
-+ afs_lru_cache_add(alrupages, cachepage);
- } else {
- put_page(newpage);
- newpage = NULL;
-@@ -2199,7 +2226,7 @@ afs_linux_readpage_fastpath(struct file *fp, struct page *pp, int *codep)
- struct file *cacheFp = NULL;
- int code;
- int dcLocked = 0;
-- struct pagevec lrupv;
-+ struct afs_lru_pages lrupages;
-
- /* Not a UFS cache, don't do anything */
- if (cacheDiskType != AFS_FCACHE_TYPE_UFS)
-@@ -2285,16 +2312,12 @@ afs_linux_readpage_fastpath(struct file *fp, struct page *pp, int *codep)
- AFS_GLOCK();
- goto out;
- }
--#if defined(PAGEVEC_INIT_COLD_ARG)
-- pagevec_init(&lrupv, 0);
--#else
-- pagevec_init(&lrupv);
--#endif
-
-- code = afs_linux_read_cache(cacheFp, pp, tdc->f.chunk, &lrupv, NULL);
-+ afs_lru_cache_init(&lrupages);
-
-- if (pagevec_count(&lrupv))
-- __pagevec_lru_add_file(&lrupv);
-+ code = afs_linux_read_cache(cacheFp, pp, tdc->f.chunk, &lrupages, NULL);
-+
-+ afs_lru_cache_finalize(&lrupages);
-
- filp_close(cacheFp, NULL);
- AFS_GLOCK();
-@@ -2424,7 +2447,7 @@ afs_linux_bypass_readpages(struct file *fp, struct address_space *mapping,
- struct iovec* iovecp;
- struct nocache_read_request *ancr;
- struct page *pp;
-- struct pagevec lrupv;
-+ struct afs_lru_pages lrupages;
- afs_int32 code = 0;
-
- cred_t *credp;
-@@ -2449,11 +2472,7 @@ afs_linux_bypass_readpages(struct file *fp, struct address_space *mapping,
- ancr->offset = auio->uio_offset;
- ancr->length = auio->uio_resid;
-
--#if defined(PAGEVEC_INIT_COLD_ARG)
-- pagevec_init(&lrupv, 0);
--#else
-- pagevec_init(&lrupv);
--#endif
-+ afs_lru_cache_init(&lrupages);
-
- for(page_ix = 0; page_ix < num_pages; ++page_ix) {
-
-@@ -2499,27 +2518,18 @@ afs_linux_bypass_readpages(struct file *fp, struct address_space *mapping,
- lock_page(pp);
- }
-
-- /* increment page refcount--our original design assumed
-- * that locking it would effectively pin it; protect
-- * ourselves from the possiblity that this assumption is
-- * is faulty, at low cost (provided we do not fail to
-- * do the corresponding decref on the other side) */
-- get_page(pp);
--
- /* save the page for background map */
- iovecp[page_ix].iov_base = (void*) pp;
-
- /* and put it on the LRU cache */
-- if (!pagevec_add(&lrupv, pp))
-- __pagevec_lru_add_file(&lrupv);
-+ afs_lru_cache_add(&lrupages, pp);
- }
- }
-
- /* If there were useful pages in the page list, make sure all pages
- * are in the LRU cache, then schedule the read */
- if(page_count) {
-- if (pagevec_count(&lrupv))
-- __pagevec_lru_add_file(&lrupv);
-+ afs_lru_cache_finalize(&lrupages);
- credp = crref();
- code = afs_ReadNoCache(avc, ancr, credp);
- crfree(credp);
-@@ -2650,7 +2660,7 @@ afs_linux_readpages(struct file *fp, struct address_space *mapping,
- int code;
- unsigned int page_idx;
- loff_t offset;
-- struct pagevec lrupv;
-+ struct afs_lru_pages lrupages;
- struct afs_pagecopy_task *task;
-
- if (afs_linux_bypass_check(inode))
-@@ -2675,11 +2685,9 @@ afs_linux_readpages(struct file *fp, struct address_space *mapping,
- task = afs_pagecopy_init_task();
-
- tdc = NULL;
--#if defined(PAGEVEC_INIT_COLD_ARG)
-- pagevec_init(&lrupv, 0);
--#else
-- pagevec_init(&lrupv);
--#endif
-+
-+ afs_lru_cache_init(&lrupages);
-+
- for (page_idx = 0; page_idx < num_pages; page_idx++) {
- struct page *page = list_entry(page_list->prev, struct page, lru);
- list_del(&page->lru);
-@@ -2719,18 +2727,15 @@ afs_linux_readpages(struct file *fp, struct address_space *mapping,
-
- if (tdc && !add_to_page_cache(page, mapping, page->index,
- GFP_KERNEL)) {
-- get_page(page);
-- if (!pagevec_add(&lrupv, page))
-- __pagevec_lru_add_file(&lrupv);
-+ afs_lru_cache_add(&lrupages, page);
-
- /* Note that add_to_page_cache() locked 'page'.
- * afs_linux_read_cache() is guaranteed to handle unlocking it. */
-- afs_linux_read_cache(cacheFp, page, tdc->f.chunk, &lrupv, task);
-+ afs_linux_read_cache(cacheFp, page, tdc->f.chunk, &lrupages, task);
- }
- put_page(page);
- }
-- if (pagevec_count(&lrupv))
-- __pagevec_lru_add_file(&lrupv);
-+ afs_lru_cache_finalize(&lrupages);
-
- out:
- if (tdc)
---
-2.27.0
-
diff --git a/0003-LINUX-5.7-replace-__pagevec_lru_add-with-lru_cache_a.patch b/0003-LINUX-5.7-replace-__pagevec_lru_add-with-lru_cache_a.patch
deleted file mode 100644
index 9368cfd69196..000000000000
--- a/0003-LINUX-5.7-replace-__pagevec_lru_add-with-lru_cache_a.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-From e111c3009fde64b50e42d3c7a759909fbd66b208 Mon Sep 17 00:00:00 2001
-From: Cheyenne Wills <cwills@sinenomine.net>
-Date: Fri, 15 May 2020 10:40:20 -0600
-Subject: [PATCH 3/3] LINUX-5.7: replace __pagevec_lru_add with
- lru_cache_add_file
-
-The Linux function __pagevec_lru_add is no longer exported in Linux
-5.7-rc1 commit bde07cfc65da5fe6c63fe23f035f5ccc0ffd89e0
-"mm/swap.c: not necessary to export __pagevec_lru_add()".
-
-As a replacement, the Linux function lru_cache_add_file can be used for
-adding a page to the lru cache. The internal processing of
-lru_cache_add_file manages its own internal pagevec and performs the
-following:
- get_page(...)
- if(!pagevec_add(...))
- __pagevec_lru_add_file(...)
-
-Introduce an autoconf test for lru_cache_add_file and replace the calls
-associated with __pagevec_lru_add with lru_cache_add_file.
-
-NOTE: see Linux commit a0b8cab3b9b2efadabdcff264c450ca515e2619c
-"mm: remove lru parameter from __pagevec_lru_add and remove parts of
-pagevec API" as a reference for this change.
-
-The lru_cache_add_file was introduced in Linux 2.6.28, therefore this
-change affects systems with Linux 2.6.28 kernels and later.
-
-Reviewed-on: https://gerrit.openafs.org/14159
-Reviewed-by: Andrew Deason <adeason@sinenomine.net>
-Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
-Tested-by: BuildBot <buildbot@rampaginggeek.com>
-(cherry picked from commit 17b42fe67c18fab0003fb712092d36f06c93f2eb)
-
-Change-Id: I206925d1659164a54e0c3a41b82a1733cb656b41
----
- src/afs/LINUX/osi_vnodeops.c | 49 ++++++++++++++++++++++++++++++------
- src/cf/linux-kernel-func.m4 | 5 ++++
- 2 files changed, 47 insertions(+), 7 deletions(-)
-
-diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
-index 96d7a2e33..00995b27a 100644
---- a/src/afs/LINUX/osi_vnodeops.c
-+++ b/src/afs/LINUX/osi_vnodeops.c
-@@ -31,7 +31,11 @@
- #endif
- #include <linux/pagemap.h>
- #include <linux/writeback.h>
--#include <linux/pagevec.h>
-+#if defined(HAVE_LINUX_LRU_CACHE_ADD_FILE)
-+# include <linux/swap.h>
-+#else
-+# include <linux/pagevec.h>
-+#endif
- #include <linux/aio.h>
- #include "afs/lock.h"
- #include "afs/afs_bypasscache.h"
-@@ -67,6 +71,36 @@ extern struct vcache *afs_globalVp;
-
- /* Handle interfacing with Linux's pagevec/lru facilities */
-
-+#if defined(HAVE_LINUX_LRU_CACHE_ADD_FILE)
-+
-+/*
-+ * Linux's lru_cache_add_file provides a simplified LRU interface without
-+ * needing a pagevec
-+ */
-+struct afs_lru_pages {
-+ char unused;
-+};
-+
-+static inline void
-+afs_lru_cache_init(struct afs_lru_pages *alrupages)
-+{
-+ return;
-+}
-+
-+static inline void
-+afs_lru_cache_add(struct afs_lru_pages *alrupages, struct page *page)
-+{
-+ lru_cache_add_file(page);
-+}
-+
-+static inline void
-+afs_lru_cache_finalize(struct afs_lru_pages *alrupages)
-+{
-+ return;
-+}
-+#else
-+
-+/* Linux's pagevec/lru interfaces require a pagevec */
- struct afs_lru_pages {
- struct pagevec lrupv;
- };
-@@ -74,16 +108,16 @@ struct afs_lru_pages {
- static inline void
- afs_lru_cache_init(struct afs_lru_pages *alrupages)
- {
--#if defined(PAGEVEC_INIT_COLD_ARG)
-+# if defined(PAGEVEC_INIT_COLD_ARG)
- pagevec_init(&alrupages->lrupv, 0);
--#else
-+# else
- pagevec_init(&alrupages->lrupv);
--#endif
-+# endif
- }
-
--#ifndef HAVE_LINUX_PAGEVEC_LRU_ADD_FILE
--# define __pagevec_lru_add_file __pagevec_lru_add
--#endif
-+# ifndef HAVE_LINUX_PAGEVEC_LRU_ADD_FILE
-+# define __pagevec_lru_add_file __pagevec_lru_add
-+# endif
-
- static inline void
- afs_lru_cache_add(struct afs_lru_pages *alrupages, struct page *page)
-@@ -99,6 +133,7 @@ afs_lru_cache_finalize(struct afs_lru_pages *alrupages)
- if (pagevec_count(&alrupages->lrupv))
- __pagevec_lru_add_file(&alrupages->lrupv);
- }
-+#endif /* !HAVE_LINUX_LRU_ADD_FILE */
-
- /* This function converts a positive error code from AFS into a negative
- * code suitable for passing into the Linux VFS layer. It checks that the
-diff --git a/src/cf/linux-kernel-func.m4 b/src/cf/linux-kernel-func.m4
-index 597730f5f..07627db52 100644
---- a/src/cf/linux-kernel-func.m4
-+++ b/src/cf/linux-kernel-func.m4
-@@ -146,6 +146,11 @@ AC_CHECK_LINUX_FUNC([inode_lock],
- [#include <linux/fs.h>],
- [inode_lock(NULL);])
-
-+dnl lru_cache_add_file added to Linux 2.6.28.
-+AC_CHECK_LINUX_FUNC([lru_cache_add_file],
-+ [#include <linux/swap.h>],
-+ [lru_cache_add_file(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.27.0
-
diff --git a/PKGBUILD b/PKGBUILD
index 8996ad779ed9..16e399b8c0ac 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -6,8 +6,8 @@
pkgname=openafs-modules-dkms
_srcname=openafs
-pkgver=1.8.6pre2
-pkgrel=2
+pkgver=1.8.6pre3
+pkgrel=1
pkgdesc="Kernel module for OpenAFS (dkms)"
arch=('i686' 'x86_64' 'armv7h')
url="http://www.openafs.org"
@@ -18,14 +18,10 @@ conflicts=('openafs-features-libafs' 'openafs-modules' 'openafs<1.6.6-2')
options=(!emptydirs)
source=("http://openafs.org/dl/openafs/candidate/${pkgver}/${_srcname}-${pkgver}-src.tar.bz2"
"dkms.conf"
- 0001-Temporary-fix-for-compilation-with-GCC-10.patch
- 0002-libafs-Abstract-the-Linux-lru-cache-interface.patch
- 0003-LINUX-5.7-replace-__pagevec_lru_add-with-lru_cache_a.patch)
-sha256sums=('ae1aa62c977fc13d61df1f9822ff75af301c50f8ff0528c8fd1f2914fffafcf5'
+ 0001-Temporary-fix-for-compilation-with-GCC-10.patch)
+sha256sums=('9477ac1674bf75553f268d4ee36725c9fde731f5c5e5d26aa96b089cc6b721a8'
'5ea5e184f9b44f5ed45817d2b5a10149d15c8c54f49e0b5b4b773652673cb9b0'
- 'b067b59bf856d15ded1ee786d303eb7b7ff47edb5b3e078b1d43862b8db62368'
- '22d94f69864cde0027716e8bb251406b9fe3745aa6b0f8a16fcb94748e8c3925'
- 'dec56eff34fd1ea492a12d90558edfd4a46b82f203f6e7a1fd7543eb1fb0bc99')
+ 'b067b59bf856d15ded1ee786d303eb7b7ff47edb5b3e078b1d43862b8db62368')
prepare() {
cd "${srcdir}/${_srcname}-${pkgver}"
@@ -33,10 +29,6 @@ prepare() {
# Fix compilation with GCC 10 (see https://bugs.gentoo.org/706738 and https://gerrit.openafs.org/14106)
patch -p1 < "${srcdir}/0001-Temporary-fix-for-compilation-with-GCC-10.patch"
- # Fix compatibility with Linux 5.7 (https://gerrit.openafs.org/14209 and https://gerrit.openafs.org/14210)
- patch -p1 < "${srcdir}/0002-libafs-Abstract-the-Linux-lru-cache-interface.patch"
- patch -p1 < "${srcdir}/0003-LINUX-5.7-replace-__pagevec_lru_add-with-lru_cache_a.patch"
-
# Only needed when changes to configure were made
./regen.sh -q
}