Skip to content

Commit

Permalink
sys-fs/zfs-kmod: revbump 0.8.0 with critical patches
Browse files Browse the repository at this point in the history
Issue: openzfs/zfs#8816
Issue: openzfs/zfs#8778
Bug: https://bugs.gentoo.org/635002
Package-Manager: Portage-2.3.67, Repoman-2.3.12
Signed-off-by: Georgy Yakovlev <[email protected]>
  • Loading branch information
gyakovlev committed May 29, 2019
1 parent 6d9c7cf commit abf3bbd
Show file tree
Hide file tree
Showing 3 changed files with 263 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
From ec4afd27f198d93a7bd32a05cb288708ba754ada Mon Sep 17 00:00:00 2001
From: madz <[email protected]>
Date: Wed, 29 May 2019 19:17:25 +0200
Subject: [PATCH] Fix integer overflow in get_next_chunk()

dn->dn_datablksz type is uint32_t and need to be casted to uint64_t
to avoid an overflow when the record size is greater than 4 MiB.

Reviewed-by: Tom Caputi <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Olivier Mazouffre <[email protected]>
Closes #8778
Closes #8797
---
module/zfs/dmu.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/module/zfs/dmu.c b/module/zfs/dmu.c
index 1697a632078..a283b062238 100644
--- a/module/zfs/dmu.c
+++ b/module/zfs/dmu.c
@@ -719,8 +719,8 @@ get_next_chunk(dnode_t *dn, uint64_t *start, uint64_t minimum, uint64_t *l1blks)
uint64_t blks;
uint64_t maxblks = DMU_MAX_ACCESS >> (dn->dn_indblkshift + 1);
/* bytes of data covered by a level-1 indirect block */
- uint64_t iblkrange =
- dn->dn_datablksz * EPB(dn->dn_indblkshift, SPA_BLKPTRSHIFT);
+ uint64_t iblkrange = (uint64_t)dn->dn_datablksz *
+ EPB(dn->dn_indblkshift, SPA_BLKPTRSHIFT);

ASSERT3U(minimum, <=, *start);

53 changes: 53 additions & 0 deletions sys-fs/zfs-kmod/files/0.8.0_revert_Report_holes.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
From: Georgy Yakovlev <[email protected]>
Date: Wed, 29 May 2019 14:38:15 -0700
Subject: Revert [PATCH] Report holes when there are only metadata changes

This reverts ec4f9b8f30391a3fb46c8d4a31c2dc9250dca1bb
Issue: https://github.com/zfsonlinux/zfs/issues/8816
Bug: https://bugs.gentoo.org/635002
---
--- b/module/zfs/dmu.c
+++ a/module/zfs/dmu.c
@@ -2366,39 +2366,14 @@
return (err);

/*
+ * Check if dnode is dirty
- * Check if there are dirty data blocks or frees which have not been
- * synced. Dirty spill and bonus blocks which are external to the
- * object can ignored when reporting holes.
*/
- mutex_enter(&dn->dn_mtx);
for (i = 0; i < TXG_SIZE; i++) {
if (multilist_link_active(&dn->dn_dirty_link[i])) {
+ clean = B_FALSE;
+ break;
-
- if (dn->dn_free_ranges[i] != NULL) {
- clean = B_FALSE;
- break;
- }
-
- list_t *list = &dn->dn_dirty_records[i];
- dbuf_dirty_record_t *dr;
-
- for (dr = list_head(list); dr != NULL;
- dr = list_next(list, dr)) {
- dmu_buf_impl_t *db = dr->dr_dbuf;
-
- if (db->db_blkid == DMU_SPILL_BLKID ||
- db->db_blkid == DMU_BONUS_BLKID)
- continue;
-
- clean = B_FALSE;
- break;
- }
}
-
- if (clean == B_FALSE)
- break;
}
- mutex_exit(&dn->dn_mtx);

/*
* If compatibility option is on, sync any current changes before
178 changes: 178 additions & 0 deletions sys-fs/zfs-kmod/zfs-kmod-0.8.0-r1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

inherit flag-o-matic linux-info linux-mod toolchain-funcs

DESCRIPTION="Linux ZFS kernel module for sys-fs/zfs"
HOMEPAGE="https://zfsonlinux.org/"

if [[ ${PV} == "9999" ]]; then
inherit autotools git-r3
EGIT_REPO_URI="https://github.com/zfsonlinux/zfs.git"
else
SRC_URI="https://github.com/zfsonlinux/zfs/releases/download/zfs-${PV}/zfs-${PV}.tar.gz"
KEYWORDS="~amd64"
S="${WORKDIR}/zfs-${PV}"
ZFS_KERNEL_COMPAT="5.1"
fi

LICENSE="CDDL debug? ( GPL-2+ )"
SLOT="0"
IUSE="custom-cflags debug +rootfs"

DEPEND=""

RDEPEND="${DEPEND}
!sys-fs/zfs-fuse
!sys-kernel/spl
"

BDEPEND="
dev-lang/perl
virtual/awk
"

RESTRICT="debug? ( strip ) test"

DOCS=( AUTHORS COPYRIGHT META README.md )

PATCHES=(
"${FILESDIR}"/0.8.0_revert_Report_holes.patch
"${FILESDIR}"/0.8.0_Fix_integer_overflow_in_get_next_chunk.patch
)

pkg_setup() {
linux-info_pkg_setup

CONFIG_CHECK="
!DEBUG_LOCK_ALLOC
EFI_PARTITION
MODULES
!PAX_KERNEXEC_PLUGIN_METHOD_OR
!TRIM_UNUSED_KSYMS
ZLIB_DEFLATE
ZLIB_INFLATE
"

use debug && CONFIG_CHECK="${CONFIG_CHECK}
FRAME_POINTER
DEBUG_INFO
!DEBUG_INFO_REDUCED
"

use rootfs && \
CONFIG_CHECK="${CONFIG_CHECK}
BLK_DEV_INITRD
DEVTMPFS
"

kernel_is -lt 5 && CONFIG_CHECK="${CONFIG_CHECK} IOSCHED_NOOP"

kernel_is -ge 2 6 32 || die "Linux 2.6.32 or newer required"

if [[ ${PV} != "9999" ]]; then
local kv_major_max kv_minor_max zcompat
zcompat="${ZFS_KERNEL_COMPAT_OVERRIDE:-${ZFS_KERNEL_COMPAT}}"
kv_major_max="${zcompat%%.*}"
zcompat="${zcompat#*.}"
kv_minor_max="${zcompat%%.*}"
kernel_is -le "${kv_major_max}" "${kv_minor_max}" || die \
"Linux ${kv_major_max}.${kv_minor_max} is the latest supported version"
fi

check_extra_config
}

src_prepare() {
default

if [[ ${PV} == "9999" ]]; then
eautoreconf
else
# Set module revision number
sed -i "s/\(Release:\)\(.*\)1/\1\2${PR}-gentoo/" META || die "Could not set Gentoo release"
fi

# Remove GPLv2-licensed ZPIOS unless we are debugging
use debug || sed -e 's/^subdir-m += zpios$//' -i module/Makefile.in
}

src_configure() {
set_arch_to_kernel

use custom-cflags || strip-flags

filter-ldflags -Wl,*

local myconf=(
--bindir="${EPREFIX}/bin"
--sbindir="${EPREFIX}/sbin"
--with-config=kernel
--with-linux="${KV_DIR}"
--with-linux-obj="${KV_OUT_DIR}"
$(use_enable debug)
)

econf "${myconf[@]}"
}

src_compile() {
set_arch_to_kernel

myemakeargs=( V=1 )

emake "${myemakeargs[@]}"
}

src_install() {
set_arch_to_kernel

myemakeargs+=(
DEPMOD="/bin/true"
DESTDIR="${D}"
INSTALL_MOD_PATH="${INSTALL_MOD_PATH:-$EROOT}"
)

emake "${myemakeargs[@]}" install

einstalldocs
}

pkg_postinst() {
linux-mod_pkg_postinst

# Remove old modules
if [[ -d "${EROOT}/lib/modules/${KV_FULL}/addon/zfs" ]]; then
ewarn "${PN} now installs modules in ${EROOT}/lib/modules/${KV_FULL}/extra/zfs"
ewarn "Old modules were detected in ${EROOT}/lib/modules/${KV_FULL}/addon/zfs"
ewarn "Automatically removing old modules to avoid problems."
rm -r "${EROOT}/lib/modules/${KV_FULL}/addon/zfs" || die "Cannot remove modules"
rmdir --ignore-fail-on-non-empty "${EROOT}/lib/modules/${KV_FULL}/addon"
fi

if use x86 || use arm; then
ewarn "32-bit kernels will likely require increasing vmalloc to"
ewarn "at least 256M and decreasing zfs_arc_max to some value less than that."
fi

ewarn "This version of ZFSOnLinux includes support for new feature flags"
ewarn "that are incompatible with previous versions. GRUB2 support for"
ewarn "/boot with the new feature flags is not yet available."
ewarn "Do *NOT* upgrade root pools to use the new feature flags."
ewarn "Any new pools will be created with the new feature flags by default"
ewarn "and will not be compatible with older versions of ZFSOnLinux. To"
ewarn "create a newpool that is backward compatible wih GRUB2, use "
ewarn
ewarn "zpool create -d -o feature@async_destroy=enabled "
ewarn " -o feature@empty_bpobj=enabled -o feature@lz4_compress=enabled"
ewarn " -o feature@spacemap_histogram=enabled"
ewarn " -o feature@enabled_txg=enabled "
ewarn " -o feature@extensible_dataset=enabled -o feature@bookmarks=enabled"
ewarn " ..."
ewarn
ewarn "GRUB2 support will be updated as soon as either the GRUB2"
ewarn "developers do a tag or the Gentoo developers find time to backport"
ewarn "support from GRUB2 HEAD."
}

0 comments on commit abf3bbd

Please sign in to comment.