From abf3bbd8488b7eb5177cac9898ccc8ea6d963429 Mon Sep 17 00:00:00 2001 From: Georgy Yakovlev Date: Wed, 29 May 2019 15:12:55 -0700 Subject: sys-fs/zfs-kmod: revbump 0.8.0 with critical patches Issue: https://github.com/zfsonlinux/zfs/issues/8816 Issue: https://github.com/zfsonlinux/zfs/issues/8778 Bug: https://bugs.gentoo.org/635002 Package-Manager: Portage-2.3.67, Repoman-2.3.12 Signed-off-by: Georgy Yakovlev --- ....0_Fix_integer_overflow_in_get_next_chunk.patch | 32 ++++ .../zfs-kmod/files/0.8.0_revert_Report_holes.patch | 53 ++++++ sys-fs/zfs-kmod/zfs-kmod-0.8.0-r1.ebuild | 178 +++++++++++++++++++++ 3 files changed, 263 insertions(+) create mode 100644 sys-fs/zfs-kmod/files/0.8.0_Fix_integer_overflow_in_get_next_chunk.patch create mode 100644 sys-fs/zfs-kmod/files/0.8.0_revert_Report_holes.patch create mode 100644 sys-fs/zfs-kmod/zfs-kmod-0.8.0-r1.ebuild (limited to 'sys-fs') diff --git a/sys-fs/zfs-kmod/files/0.8.0_Fix_integer_overflow_in_get_next_chunk.patch b/sys-fs/zfs-kmod/files/0.8.0_Fix_integer_overflow_in_get_next_chunk.patch new file mode 100644 index 000000000000..0042bfdc99c4 --- /dev/null +++ b/sys-fs/zfs-kmod/files/0.8.0_Fix_integer_overflow_in_get_next_chunk.patch @@ -0,0 +1,32 @@ +From ec4afd27f198d93a7bd32a05cb288708ba754ada Mon Sep 17 00:00:00 2001 +From: madz +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 +Reviewed-by: Brian Behlendorf +Signed-off-by: Olivier Mazouffre +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); + diff --git a/sys-fs/zfs-kmod/files/0.8.0_revert_Report_holes.patch b/sys-fs/zfs-kmod/files/0.8.0_revert_Report_holes.patch new file mode 100644 index 000000000000..f8d67ccc7cef --- /dev/null +++ b/sys-fs/zfs-kmod/files/0.8.0_revert_Report_holes.patch @@ -0,0 +1,53 @@ +From: Georgy Yakovlev +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 diff --git a/sys-fs/zfs-kmod/zfs-kmod-0.8.0-r1.ebuild b/sys-fs/zfs-kmod/zfs-kmod-0.8.0-r1.ebuild new file mode 100644 index 000000000000..0108a7a9b3b7 --- /dev/null +++ b/sys-fs/zfs-kmod/zfs-kmod-0.8.0-r1.ebuild @@ -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." +} -- cgit v1.2.3-65-gdbad