From ea74809fc56791c2f45fc46815a7d5a8fd462961 Mon Sep 17 00:00:00 2001 From: Sam James Date: Fri, 24 Nov 2023 21:48:39 +0000 Subject: sys-fs/zfs-kmod: disable zfs_dmu_offset_next_sync tunable by default As a mitigation until more is understood and fixes are tested & reviewed, change the default of zfs_dmu_offset_next_sync from 1 to 0, as it was before 05b3eb6d232009db247882a39d518e7282630753 upstream. There are no reported cases of The Bug being hit with zfs_dmu_offset_next_sync=1: that does not mean this is a cure or a real fix, but it _appears_ to be at least effective in reducing the chances of it happening. By itself, it's a safe change anyway, so it feels worth us doing while we wait. Note that The Bug has been reproduced on 2.1.x as well, hence we do it for both 2.1.13 and 2.2.1. Bug: https://github.com/openzfs/zfs/issues/11900 Bug: https://github.com/openzfs/zfs/issues/15526 Bug: https://bugs.gentoo.org/917224 Signed-off-by: Sam James --- ...s_dmu_offset_next_sync-tunable-by-default.patch | 40 ++++ ...s_dmu_offset_next_sync-tunable-by-default.patch | 43 ++++ sys-fs/zfs-kmod/zfs-kmod-2.1.13-r1.ebuild | 178 +++++++++++++++++ sys-fs/zfs-kmod/zfs-kmod-2.2.1-r1.ebuild | 218 +++++++++++++++++++++ sys-fs/zfs-kmod/zfs-kmod-9999.ebuild | 1 + 5 files changed, 480 insertions(+) create mode 100644 sys-fs/zfs-kmod/files/zfs-kmod-2.1.13-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch create mode 100644 sys-fs/zfs-kmod/files/zfs-kmod-2.2.1-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch create mode 100644 sys-fs/zfs-kmod/zfs-kmod-2.1.13-r1.ebuild create mode 100644 sys-fs/zfs-kmod/zfs-kmod-2.2.1-r1.ebuild (limited to 'sys-fs/zfs-kmod') diff --git a/sys-fs/zfs-kmod/files/zfs-kmod-2.1.13-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch b/sys-fs/zfs-kmod/files/zfs-kmod-2.1.13-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch new file mode 100644 index 000000000000..c03398450e48 --- /dev/null +++ b/sys-fs/zfs-kmod/files/zfs-kmod-2.1.13-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch @@ -0,0 +1,40 @@ +From 2b266bd36980caefe353411bd56b2487c44aeb6e Mon Sep 17 00:00:00 2001 +From: Sam James +Date: Fri, 24 Nov 2023 21:38:06 +0000 +Subject: [PATCH] Disable zfs_dmu_offset_next_sync tunable by default + +As a mitigation until more is understood and fixes are tested & reviewed, change +the default of zfs_dmu_offset_next_sync from 1 to 0, as it was before +05b3eb6d232009db247882a39d518e7282630753. + +There are no reported cases of The Bug being hit with zfs_dmu_offset_next_sync=1: +that does not mean this is a cure or a real fix, but it _appears_ to be at least +effective in reducing the chances of it happening. By itself, it's a safe change +anyway, so it feels worth us doing while we wait. + +Bug: https://github.com/openzfs/zfs/issues/11900 +Bug: https://github.com/openzfs/zfs/issues/15526 +Bug: https://bugs.gentoo.org/917224 +Signed-off-by: Sam James +--- a/man/man4/zfs.4 ++++ b/man/man4/zfs.4 +@@ -1646,7 +1646,7 @@ Allow no-operation writes. + The occurrence of nopwrites will further depend on other pool properties + .Pq i.a. the checksumming and compression algorithms . + . +-.It Sy zfs_dmu_offset_next_sync Ns = Ns Sy 1 Ns | Ns 0 Pq int ++.It Sy zfs_dmu_offset_next_sync Ns = Ns Sy 0 Ns | Ns 1 Pq int + Enable forcing TXG sync to find holes. + When enabled forces ZFS to sync data when + .Sy SEEK_HOLE No or Sy SEEK_DATA +--- a/module/zfs/dmu.c ++++ b/module/zfs/dmu.c +@@ -80,7 +80,7 @@ unsigned long zfs_per_txg_dirty_frees_percent = 30; + * Disabling this option will result in holes never being reported in dirty + * files which is always safe. + */ +-int zfs_dmu_offset_next_sync = 1; ++int zfs_dmu_offset_next_sync = 0; + + /* + * Limit the amount we can prefetch with one call to this amount. This diff --git a/sys-fs/zfs-kmod/files/zfs-kmod-2.2.1-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch b/sys-fs/zfs-kmod/files/zfs-kmod-2.2.1-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch new file mode 100644 index 000000000000..f49ab09adf7a --- /dev/null +++ b/sys-fs/zfs-kmod/files/zfs-kmod-2.2.1-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch @@ -0,0 +1,43 @@ +From 2b266bd36980caefe353411bd56b2487c44aeb6e Mon Sep 17 00:00:00 2001 +From: Sam James +Date: Fri, 24 Nov 2023 21:38:06 +0000 +Subject: [PATCH] Disable zfs_dmu_offset_next_sync tunable by default + +As a mitigation until more is understood and fixes are tested & reviewed, change +the default of zfs_dmu_offset_next_sync from 1 to 0, as it was before +05b3eb6d232009db247882a39d518e7282630753. + +There are no reported cases of The Bug being hit with zfs_dmu_offset_next_sync=1: +that does not mean this is a cure or a real fix, but it _appears_ to be at least +effective in reducing the chances of it happening. By itself, it's a safe change +anyway, so it feels worth us doing while we wait. + +Bug: https://github.com/openzfs/zfs/issues/11900 +Bug: https://github.com/openzfs/zfs/issues/15526 +Bug: https://bugs.gentoo.org/917224 +Signed-off-by: Sam James +--- a/man/man4/zfs.4 ++++ b/man/man4/zfs.4 +@@ -1677,7 +1677,7 @@ Allow no-operation writes. + The occurrence of nopwrites will further depend on other pool properties + .Pq i.a. the checksumming and compression algorithms . + . +-.It Sy zfs_dmu_offset_next_sync Ns = Ns Sy 1 Ns | Ns 0 Pq int ++.It Sy zfs_dmu_offset_next_sync Ns = Ns Sy 0 Ns | Ns 1 Pq int + Enable forcing TXG sync to find holes. + When enabled forces ZFS to sync data when + .Sy SEEK_HOLE No or Sy SEEK_DATA +--- a/module/zfs/dmu.c ++++ b/module/zfs/dmu.c +@@ -82,7 +82,7 @@ static uint_t zfs_per_txg_dirty_frees_percent = 30; + * Disabling this option will result in holes never being reported in dirty + * files which is always safe. + */ +-static int zfs_dmu_offset_next_sync = 1; ++static int zfs_dmu_offset_next_sync = 0; + + /* + * Limit the amount we can prefetch with one call to this amount. This +-- +2.43.0 + diff --git a/sys-fs/zfs-kmod/zfs-kmod-2.1.13-r1.ebuild b/sys-fs/zfs-kmod/zfs-kmod-2.1.13-r1.ebuild new file mode 100644 index 000000000000..61dedf6ddd17 --- /dev/null +++ b/sys-fs/zfs-kmod/zfs-kmod-2.1.13-r1.ebuild @@ -0,0 +1,178 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit autotools dist-kernel-utils flag-o-matic linux-mod-r1 multiprocessing + +DESCRIPTION="Linux ZFS kernel module for sys-fs/zfs" +HOMEPAGE="https://github.com/openzfs/zfs" + +MODULES_KERNEL_MAX=6.5 +MODULES_KERNEL_MIN=3.10 + +if [[ ${PV} == 9999 ]] ; then + EGIT_REPO_URI="https://github.com/openzfs/zfs.git" + inherit git-r3 + unset MODULES_KERNEL_MAX +else + VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/openzfs.asc + inherit verify-sig + + MY_PV=${PV/_rc/-rc} + SRC_URI="https://github.com/openzfs/zfs/releases/download/zfs-${MY_PV}/zfs-${MY_PV}.tar.gz" + SRC_URI+=" verify-sig? ( https://github.com/openzfs/zfs/releases/download/zfs-${MY_PV}/zfs-${MY_PV}.tar.gz.asc )" + S="${WORKDIR}/zfs-${PV%_rc?}" + + ZFS_KERNEL_COMPAT="${MODULES_KERNEL_MAX}" + # Increments minor eg 5.14 -> 5.15, and still supports override. + ZFS_KERNEL_DEP="${ZFS_KERNEL_COMPAT_OVERRIDE:-${ZFS_KERNEL_COMPAT}}" + ZFS_KERNEL_DEP="${ZFS_KERNEL_DEP%%.*}.$(( ${ZFS_KERNEL_DEP##*.} + 1))" + + if [[ ${PV} != *_rc* ]] ; then + KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~sparc" + fi +fi + +LICENSE="CDDL MIT debug? ( GPL-2+ )" +SLOT="0/${PVR}" +IUSE="custom-cflags debug +rootfs" +RESTRICT="test" + +BDEPEND=" + dev-lang/perl + app-alternatives/awk +" + +if [[ ${PV} != 9999 ]] ; then + BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-openzfs )" + + IUSE+=" +dist-kernel-cap" + RDEPEND=" + dist-kernel-cap? ( dist-kernel? ( + 5.15, and still supports override. + ZFS_KERNEL_DEP="${ZFS_KERNEL_COMPAT_OVERRIDE:-${ZFS_KERNEL_COMPAT}}" + ZFS_KERNEL_DEP="${ZFS_KERNEL_DEP%%.*}.$(( ${ZFS_KERNEL_DEP##*.} + 1))" + + if [[ ${PV} != *_rc* ]] ; then + KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~sparc" + fi +fi + +LICENSE="CDDL MIT debug? ( GPL-2+ )" +SLOT="0/${PVR}" +IUSE="custom-cflags debug +rootfs" +RESTRICT="test" + +BDEPEND=" + app-alternatives/awk + dev-lang/perl +" + +if [[ ${PV} != 9999 ]] ; then + BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-openzfs )" + + IUSE+=" +dist-kernel-cap" + RDEPEND=" + dist-kernel-cap? ( dist-kernel? ( +