commit: ea74809fc56791c2f45fc46815a7d5a8fd462961 Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Fri Nov 24 21:48:39 2023 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Fri Nov 24 21:51:35 2023 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ea74809f
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 <sam <AT> gentoo.org> ...s_dmu_offset_next_sync-tunable-by-default.patch | 40 ++++++++++++++++++ ...s_dmu_offset_next_sync-tunable-by-default.patch | 43 ++++++++++++++++++++ ...-kmod-9999.ebuild => zfs-kmod-2.1.13-r1.ebuild} | 47 ++-------------------- ...s-kmod-9999.ebuild => zfs-kmod-2.2.1-r1.ebuild} | 1 + sys-fs/zfs-kmod/zfs-kmod-9999.ebuild | 1 + 5 files changed, 89 insertions(+), 43 deletions(-) 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 <s...@gentoo.org> +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 <s...@gentoo.org> +--- 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 <s...@gentoo.org> +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 <s...@gentoo.org> +--- 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-9999.ebuild b/sys-fs/zfs-kmod/zfs-kmod-2.1.13-r1.ebuild similarity index 76% copy from sys-fs/zfs-kmod/zfs-kmod-9999.ebuild copy to sys-fs/zfs-kmod/zfs-kmod-2.1.13-r1.ebuild index 0b3c28a2134c..61dedf6ddd17 100644 --- a/sys-fs/zfs-kmod/zfs-kmod-9999.ebuild +++ b/sys-fs/zfs-kmod/zfs-kmod-2.1.13-r1.ebuild @@ -8,7 +8,7 @@ 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.6 +MODULES_KERNEL_MAX=6.5 MODULES_KERNEL_MIN=3.10 if [[ ${PV} == 9999 ]] ; then @@ -22,7 +22,7 @@ else 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-${MY_PV}" + S="${WORKDIR}/zfs-${PV%_rc?}" ZFS_KERNEL_COMPAT="${MODULES_KERNEL_MAX}" # Increments minor eg 5.14 -> 5.15, and still supports override. @@ -40,8 +40,8 @@ IUSE="custom-cflags debug +rootfs" RESTRICT="test" BDEPEND=" - app-alternatives/awk dev-lang/perl + app-alternatives/awk " if [[ ${PV} != 9999 ]] ; then @@ -60,6 +60,7 @@ PDEPEND="dist-kernel? ( ~sys-fs/zfs-${PV}[dist-kernel] )" PATCHES=( "${FILESDIR}"/${PN}-2.1.11-gentoo.patch + "${FILESDIR}"/${PN}-2.1.13-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch ) pkg_pretend() { @@ -149,47 +150,7 @@ src_install() { dodoc AUTHORS COPYRIGHT META README.md } -_old_layout_cleanup() { - # new files are just extra/{spl,zfs}.ko with no subdirs. - local olddir=( - avl/zavl - icp/icp - lua/zlua - nvpair/znvpair - spl/spl - unicode/zunicode - zcommon/zcommon - zfs/zfs - zstd/zzstd - ) - - # kernel/module/Kconfig contains possible compressed extentions. - local kext kextfiles - for kext in .ko{,.{gz,xz,zst}}; do - kextfiles+=( "${olddir[@]/%/${kext}}" ) - done - - local oldfile oldpath - for oldfile in "${kextfiles[@]}"; do - oldpath="${EROOT}/lib/modules/${KV_FULL}/extra/${oldfile}" - if [[ -f "${oldpath}" ]]; then - ewarn "Found obsolete zfs module ${oldfile} for current kernel ${KV_FULL}, removing." - rm -rv "${oldpath}" || die - # we do not remove non-empty directories just for safety in case there's something else. - # also it may fail if there are both compressed and uncompressed modules installed. - rmdir -v --ignore-fail-on-non-empty "${oldpath%/*.*}" || die - fi - done -} - pkg_postinst() { - # Check for old module layout before doing anything else. - # only attempt layout cleanup if new .ko location is used. - local newko=( "${EROOT}/lib/modules/${KV_FULL}/extra"/{zfs,spl}.ko* ) - # We check first array member, if glob above did not exand, it will be "zfs.ko*" and -f will return false. - # if glob expanded -f will do correct file precense check. - [[ -f ${newko[0]} ]] && _old_layout_cleanup - linux-mod-r1_pkg_postinst if [[ -z ${ROOT} ]] && use dist-kernel ; then diff --git a/sys-fs/zfs-kmod/zfs-kmod-9999.ebuild b/sys-fs/zfs-kmod/zfs-kmod-2.2.1-r1.ebuild similarity index 98% copy from sys-fs/zfs-kmod/zfs-kmod-9999.ebuild copy to sys-fs/zfs-kmod/zfs-kmod-2.2.1-r1.ebuild index 0b3c28a2134c..6537bbc1a148 100644 --- a/sys-fs/zfs-kmod/zfs-kmod-9999.ebuild +++ b/sys-fs/zfs-kmod/zfs-kmod-2.2.1-r1.ebuild @@ -60,6 +60,7 @@ PDEPEND="dist-kernel? ( ~sys-fs/zfs-${PV}[dist-kernel] )" PATCHES=( "${FILESDIR}"/${PN}-2.1.11-gentoo.patch + "${FILESDIR}"/${PN}-2.2.1-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch ) pkg_pretend() { diff --git a/sys-fs/zfs-kmod/zfs-kmod-9999.ebuild b/sys-fs/zfs-kmod/zfs-kmod-9999.ebuild index 0b3c28a2134c..6537bbc1a148 100644 --- a/sys-fs/zfs-kmod/zfs-kmod-9999.ebuild +++ b/sys-fs/zfs-kmod/zfs-kmod-9999.ebuild @@ -60,6 +60,7 @@ PDEPEND="dist-kernel? ( ~sys-fs/zfs-${PV}[dist-kernel] )" PATCHES=( "${FILESDIR}"/${PN}-2.1.11-gentoo.patch + "${FILESDIR}"/${PN}-2.2.1-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch ) pkg_pretend() {