summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorArchzfs Buildbot2020-02-29 14:57:48 +0000
committerArchzfs Buildbot2020-02-29 14:57:48 +0000
commita1fb07bb4de3133d4e4c491b1451d39d3aec859b (patch)
tree056953baacf2b9d8872dab2a73d19652b0e27f0d
parent46dfc39a22906a9e62987800d4baefd68a538829 (diff)
downloadaur-a1fb07bb4de3133d4e4c491b1451d39d3aec859b.tar.gz
Semi-automated update for kernel 5.4.22-1 + latest git commit
-rw-r--r--.SRCINFO8
-rw-r--r--PKGBUILD10
-rw-r--r--linux-5.5-compat-blkg_tryget.patch136
3 files changed, 147 insertions, 7 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 0346a1a8602e..653107652bca 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,5 +1,5 @@
pkgbase = zfs-linux-lts-git
- pkgver = 2020.02.27.r5777.g2ce90dca9_5.4.22.1
+ pkgver = 2020.02.28.r5785.gd32eff3a2_5.4.22.1
pkgrel = 1
url = https://zfsonlinux.org/
arch = x86_64
@@ -7,10 +7,12 @@ pkgbase = zfs-linux-lts-git
makedepends = linux-lts-headers=5.4.22-1
makedepends = git
depends = kmod
- depends = zfs-utils-git=2020.02.27.r5777.g2ce90dca9
+ depends = zfs-utils-git=2020.02.28.r5785.gd32eff3a2
depends = linux-lts=5.4.22-1
- source = git+https://github.com/zfsonlinux/zfs.git#commit=2ce90dca91a991592da48c52332326ae4bb25b69
+ source = git+https://github.com/zfsonlinux/zfs.git#commit=d32eff3a27d2a57fa280b7e461883fed2a4cec16
+ source = linux-5.5-compat-blkg_tryget.patch
sha256sums = SKIP
+ sha256sums = daae58460243c45c2c7505b1d88dcb299ea7d92bcf3f41d2d30bc213000bb1da
pkgname = zfs-linux-lts-git
pkgdesc = Kernel modules for the Zettabyte File System.
diff --git a/PKGBUILD b/PKGBUILD
index 9a519cb18f2e..f076f6620b8c 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -17,8 +17,8 @@
#
pkgbase="zfs-linux-lts-git"
pkgname=("zfs-linux-lts-git" "zfs-linux-lts-git-headers")
-_commit='2ce90dca91a991592da48c52332326ae4bb25b69'
-_zfsver="2020.02.27.r5777.g2ce90dca9"
+_commit='d32eff3a27d2a57fa280b7e461883fed2a4cec16'
+_zfsver="2020.02.28.r5785.gd32eff3a2"
_kernelver="5.4.22-1"
_extramodules="5.4.22-1-lts"
@@ -27,8 +27,10 @@ pkgrel=1
makedepends=("linux-lts-headers=${_kernelver}" "git")
arch=("x86_64")
url="https://zfsonlinux.org/"
-source=("git+https://github.com/zfsonlinux/zfs.git#commit=${_commit}")
-sha256sums=("SKIP")
+source=("git+https://github.com/zfsonlinux/zfs.git#commit=${_commit}"
+ "linux-5.5-compat-blkg_tryget.patch")
+sha256sums=("SKIP"
+ "daae58460243c45c2c7505b1d88dcb299ea7d92bcf3f41d2d30bc213000bb1da")
license=("CDDL")
depends=("kmod" "zfs-utils-git=${_zfsver}" "linux-lts=${_kernelver}")
diff --git a/linux-5.5-compat-blkg_tryget.patch b/linux-5.5-compat-blkg_tryget.patch
new file mode 100644
index 000000000000..f636e87f805a
--- /dev/null
+++ b/linux-5.5-compat-blkg_tryget.patch
@@ -0,0 +1,136 @@
+From 2fcab8795c7c493845bfa277d44bc443802000b8 Mon Sep 17 00:00:00 2001
+From: Brian Behlendorf <behlendorf1@llnl.gov>
+Date: Fri, 28 Feb 2020 08:58:39 -0800
+Subject: [PATCH] Linux 5.5 compat: blkg_tryget()
+
+Commit https://github.com/torvalds/linux/commit/9e8d42a0f accidentally
+converted the static inline function blkg_tryget() to GPL-only for
+kernels built with CONFIG_PREEMPT_RCU=y and CONFIG_BLK_CGROUP=y.
+
+Resolve the build issue by providing our own equivalent functionality
+when needed which uses rcu_read_lock_sched() internally as before.
+
+Reviewed-by: Tony Hutter <hutter2@llnl.gov>
+Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
+Closes #9745
+Closes #10072
+---
+ config/kernel-blkg-tryget.m4 | 37 ++++++++++++++++++++++++++++++++++++
+ config/kernel.m4 | 2 ++
+ module/zfs/vdev_disk.c | 32 ++++++++++++++++++++++++++++++-
+ 3 files changed, 70 insertions(+), 1 deletion(-)
+ create mode 100644 config/kernel-blkg-tryget.m4
+
+diff --git a/config/kernel-blkg-tryget.m4 b/config/kernel-blkg-tryget.m4
+new file mode 100644
+index 00000000000..fb831ca3b3e
+--- /dev/null
++++ b/config/kernel-blkg-tryget.m4
+@@ -0,0 +1,37 @@
++dnl #
++dnl # Linux 5.5 API,
++dnl #
++dnl # The Linux 5.5 kernel updated percpu_ref_tryget() which is inlined by
++dnl # blkg_tryget() to use rcu_read_lock() instead of rcu_read_lock_sched().
++dnl # As a side effect the function was converted to GPL-only.
++dnl #
++AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKG_TRYGET], [
++ ZFS_LINUX_TEST_SRC([blkg_tryget], [
++ #include <linux/blk-cgroup.h>
++ #include <linux/bio.h>
++ #include <linux/fs.h>
++ ],[
++ struct blkcg_gq blkg __attribute__ ((unused));
++ bool rc __attribute__ ((unused));
++ rc = blkg_tryget(&blkg);
++ ], [], [$ZFS_META_LICENSE])
++])
++
++AC_DEFUN([ZFS_AC_KERNEL_BLKG_TRYGET], [
++ AC_MSG_CHECKING([whether blkg_tryget() is available])
++ ZFS_LINUX_TEST_RESULT([blkg_tryget], [
++ AC_MSG_RESULT(yes)
++ AC_DEFINE(HAVE_BLKG_TRYGET, 1, [blkg_tryget() is available])
++
++ AC_MSG_CHECKING([whether blkg_tryget() is GPL-only])
++ ZFS_LINUX_TEST_RESULT([blkg_tryget_license], [
++ AC_MSG_RESULT(no)
++ ],[
++ AC_MSG_RESULT(yes)
++ AC_DEFINE(HAVE_BLKG_TRYGET_GPL_ONLY, 1,
++ [blkg_tryget() GPL-only])
++ ])
++ ],[
++ AC_MSG_RESULT(no)
++ ])
++])
+diff --git a/config/kernel.m4 b/config/kernel.m4
+index dce619729d4..bea6f9b1bbf 100644
+--- a/config/kernel.m4
++++ b/config/kernel.m4
+@@ -70,6 +70,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
+ ZFS_AC_KERNEL_SRC_BIO_BI_STATUS
+ ZFS_AC_KERNEL_SRC_BIO_RW_BARRIER
+ ZFS_AC_KERNEL_SRC_BIO_RW_DISCARD
++ ZFS_AC_KERNEL_SRC_BLKG_TRYGET
+ ZFS_AC_KERNEL_SRC_BLK_QUEUE_BDI
+ ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD
+ ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE
+@@ -186,6 +187,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
+ ZFS_AC_KERNEL_BIO_BI_STATUS
+ ZFS_AC_KERNEL_BIO_RW_BARRIER
+ ZFS_AC_KERNEL_BIO_RW_DISCARD
++ ZFS_AC_KERNEL_BLKG_TRYGET
+ ZFS_AC_KERNEL_BLK_QUEUE_BDI
+ ZFS_AC_KERNEL_BLK_QUEUE_DISCARD
+ ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE
+diff --git a/module/zfs/vdev_disk.c b/module/zfs/vdev_disk.c
+index 661f0f1b727..8544bb8ffb6 100644
+--- a/module/zfs/vdev_disk.c
++++ b/module/zfs/vdev_disk.c
+@@ -473,6 +473,36 @@ vdev_submit_bio_impl(struct bio *bio)
+
+ #ifdef HAVE_BIO_SET_DEV
+ #if defined(CONFIG_BLK_CGROUP) && defined(HAVE_BIO_SET_DEV_GPL_ONLY)
++/*
++ * The Linux 5.5 kernel updated percpu_ref_tryget() which is inlined by
++ * blkg_tryget() to use rcu_read_lock() instead of rcu_read_lock_sched().
++ * As a side effect the function was converted to GPL-only. Define our
++ * own version when needed which uses rcu_read_lock_sched().
++ */
++#if defined(HAVE_BLKG_TRYGET_GPL_ONLY)
++static inline bool
++vdev_blkg_tryget(struct blkcg_gq *blkg)
++{
++ struct percpu_ref *ref = &blkg->refcnt;
++ unsigned long __percpu *count;
++ bool rc;
++
++ rcu_read_lock_sched();
++
++ if (__ref_is_percpu(ref, &count)) {
++ this_cpu_inc(*count);
++ rc = true;
++ } else {
++ rc = atomic_long_inc_not_zero(&ref->count);
++ }
++
++ rcu_read_unlock_sched();
++
++ return (rc);
++}
++#elif defined(HAVE_BLKG_TRYGET)
++#define vdev_blkg_tryget(bg) blkg_tryget(bg)
++#endif
+ /*
+ * The Linux 5.0 kernel updated the bio_set_dev() macro so it calls the
+ * GPL-only bio_associate_blkg() symbol thus inadvertently converting
+@@ -487,7 +517,7 @@ vdev_bio_associate_blkg(struct bio *bio)
+ ASSERT3P(q, !=, NULL);
+ ASSERT3P(bio->bi_blkg, ==, NULL);
+
+- if (q->root_blkg && blkg_tryget(q->root_blkg))
++ if (q->root_blkg && vdev_blkg_tryget(q->root_blkg))
+ bio->bi_blkg = q->root_blkg;
+ }
+ #define bio_associate_blkg vdev_bio_associate_blkg