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() {

Reply via email to