commit:     abf3bbd8488b7eb5177cac9898ccc8ea6d963429
Author:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
AuthorDate: Wed May 29 22:12:55 2019 +0000
Commit:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Wed May 29 22:14:29 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=abf3bbd8

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 <gyakovlev <AT> gentoo.org>

 ....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(+)

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 00000000000..0042bfdc99c
--- /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 <[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);
+ 

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 00000000000..f8d67ccc7ce
--- /dev/null
+++ b/sys-fs/zfs-kmod/files/0.8.0_revert_Report_holes.patch
@@ -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

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 00000000000..0108a7a9b3b
--- /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."
+}

Reply via email to