From 1278e2f4fda8248bf2d37aeddf211be75e973517 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Sun, 8 Mar 2020 02:24:08 +0000 Subject: sys-kernel/zfs-dkms : add kernel 5.5 compat --- .../2fcab8795c7c493845bfa277d44bc443802000b8.patch | 136 +++++++++++++++++++++ sys-kernel/zfs-dkms/zfs-dkms-0.8.3-r1.ebuild | 52 ++++++++ sys-kernel/zfs-dkms/zfs-dkms-0.8.3.ebuild | 50 -------- 3 files changed, 188 insertions(+), 50 deletions(-) create mode 100644 sys-kernel/zfs-dkms/files/2fcab8795c7c493845bfa277d44bc443802000b8.patch create mode 100644 sys-kernel/zfs-dkms/zfs-dkms-0.8.3-r1.ebuild delete mode 100644 sys-kernel/zfs-dkms/zfs-dkms-0.8.3.ebuild (limited to 'sys-kernel') diff --git a/sys-kernel/zfs-dkms/files/2fcab8795c7c493845bfa277d44bc443802000b8.patch b/sys-kernel/zfs-dkms/files/2fcab8795c7c493845bfa277d44bc443802000b8.patch new file mode 100644 index 00000000..f636e87f --- /dev/null +++ b/sys-kernel/zfs-dkms/files/2fcab8795c7c493845bfa277d44bc443802000b8.patch @@ -0,0 +1,136 @@ +From 2fcab8795c7c493845bfa277d44bc443802000b8 Mon Sep 17 00:00:00 2001 +From: Brian Behlendorf +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 +Signed-off-by: Brian Behlendorf +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 ++ #include ++ #include ++ ],[ ++ 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 diff --git a/sys-kernel/zfs-dkms/zfs-dkms-0.8.3-r1.ebuild b/sys-kernel/zfs-dkms/zfs-dkms-0.8.3-r1.ebuild new file mode 100644 index 00000000..09d17241 --- /dev/null +++ b/sys-kernel/zfs-dkms/zfs-dkms-0.8.3-r1.ebuild @@ -0,0 +1,52 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=7 + +inherit eutils + +MY_PN="zfs" +MY_P="${MY_PN}-${PV}" + +DESCRIPTION="ZFS sources for linux" +HOMEPAGE="http://zfsonlinux.org/" +SRC_URI="https://github.com/zfsonlinux/zfs/releases/download/zfs-${PV}/${MY_P}.tar.gz" + +SLOT="0" +LICENSE="GPL-2" +KEYWORDS="amd64" +IUSE="" +DEPEND="sys-kernel/dkms" +RDEPEND="${DEPEND}" + +PATCHES=( "${FILESDIR}"/2fcab8795c7c493845bfa277d44bc443802000b8.patch ) + +S="${WORKDIR}/${MY_P}" + +src_configure() { + : +} + +src_compile() { + : +} + +src_install() { + cp "${FILESDIR}/dkms.conf" "${S}" || die + dodir /usr/src/${P} + insinto /usr/src/${P} + doins -r ${S}/* + fperms 0755 /usr/src/${P}/configure + fperms 0755 /usr/src/${P}/scripts/dkms.mkconf + fperms 0755 /usr/src/${P}/scripts/dkms.postbuild + fperms 0755 /usr/src/${P}/scripts/enum-extract.pl +} + +pkg_postinst() { + dkms add ${PN}/${PV} +} + +pkg_prerm() { + dkms remove ${PN}/${PV} --all +} diff --git a/sys-kernel/zfs-dkms/zfs-dkms-0.8.3.ebuild b/sys-kernel/zfs-dkms/zfs-dkms-0.8.3.ebuild deleted file mode 100644 index 7e448719..00000000 --- a/sys-kernel/zfs-dkms/zfs-dkms-0.8.3.ebuild +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright 1999-2015 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Id$ - -EAPI=7 - -inherit eutils - -MY_PN="zfs" -MY_P="${MY_PN}-${PV}" - -DESCRIPTION="ZFS sources for linux" -HOMEPAGE="http://zfsonlinux.org/" -SRC_URI="https://github.com/zfsonlinux/zfs/releases/download/zfs-${PV}/${MY_P}.tar.gz" - -SLOT="0" -LICENSE="GPL-2" -KEYWORDS="amd64" -IUSE="" -DEPEND="sys-kernel/dkms" -RDEPEND="${DEPEND}" - -S="${WORKDIR}/${MY_P}" - -src_configure() { - : -} - -src_compile() { - : -} - -src_install() { - cp "${FILESDIR}/dkms.conf" "${S}" || die - dodir /usr/src/${P} - insinto /usr/src/${P} - doins -r ${S}/* - fperms 0755 /usr/src/${P}/configure - fperms 0755 /usr/src/${P}/scripts/dkms.mkconf - fperms 0755 /usr/src/${P}/scripts/dkms.postbuild - fperms 0755 /usr/src/${P}/scripts/enum-extract.pl -} - -pkg_postinst() { - dkms add ${PN}/${PV} -} - -pkg_prerm() { - dkms remove ${PN}/${PV} --all -} -- cgit v1.2.3