From e8e52daba5d186b50a3a24fd4b50b7db9dbec27e Mon Sep 17 00:00:00 2001 From: Zach Dykstra Date: Fri, 24 Nov 2023 16:06:24 -0600 Subject: [PATCH 1/2] zfs-lts: disable zfs_dmu_offset_next_sync by default --- ...ault-zfs_dmu_offset_next_sync-to-off.patch | 45 +++++++++++++++++++ srcpkgs/zfs-lts/template | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/zfs-lts/patches/default-zfs_dmu_offset_next_sync-to-off.patch diff --git a/srcpkgs/zfs-lts/patches/default-zfs_dmu_offset_next_sync-to-off.patch b/srcpkgs/zfs-lts/patches/default-zfs_dmu_offset_next_sync-to-off.patch new file mode 100644 index 0000000000000..ae21df42ce3a3 --- /dev/null +++ b/srcpkgs/zfs-lts/patches/default-zfs_dmu_offset_next_sync-to-off.patch @@ -0,0 +1,45 @@ +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 +--- +diff --git a/man/man4/zfs.4 b/man/man4/zfs.4 +index 0c60a9c8e..8c14e670b 100644 +--- 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 +diff --git a/module/zfs/dmu.c b/module/zfs/dmu.c +index 96e98a42e..c1fd57c9e 100644 +--- 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/srcpkgs/zfs-lts/template b/srcpkgs/zfs-lts/template index c9968e607927a..4f0cd99fab499 100644 --- a/srcpkgs/zfs-lts/template +++ b/srcpkgs/zfs-lts/template @@ -1,7 +1,7 @@ # Template file for 'zfs-lts' pkgname=zfs-lts version=2.1.13 -revision=1 +revision=2 build_style=gnu-configure configure_args="--with-config=user --with-mounthelperdir=/usr/bin --with-udevdir=/usr/lib/udev --with-udevruledir=/usr/lib/udev/rules.d From 027c09d4dd330bafe8dd600e69831989b9e77eca Mon Sep 17 00:00:00 2001 From: Zach Dykstra Date: Fri, 24 Nov 2023 16:06:38 -0600 Subject: [PATCH 2/2] zfs: disable zfs_dmu_offset_next_sync by default --- ...ault-zfs_dmu_offset_next_sync-to-off.patch | 51 +++++++++++++++++++ srcpkgs/zfs/template | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/zfs/patches/default-zfs_dmu_offset_next_sync-to-off.patch diff --git a/srcpkgs/zfs/patches/default-zfs_dmu_offset_next_sync-to-off.patch b/srcpkgs/zfs/patches/default-zfs_dmu_offset_next_sync-to-off.patch new file mode 100644 index 0000000000000..b452304f49c48 --- /dev/null +++ b/srcpkgs/zfs/patches/default-zfs_dmu_offset_next_sync-to-off.patch @@ -0,0 +1,51 @@ +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 +--- + man/man4/zfs.4 | 2 +- + module/zfs/dmu.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/man/man4/zfs.4 b/man/man4/zfs.4 +index 5daf27e9d..d70c8921c 100644 +--- 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 +diff --git a/module/zfs/dmu.c b/module/zfs/dmu.c +index a63aac51f..2cdbd4dc5 100644 +--- 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/srcpkgs/zfs/template b/srcpkgs/zfs/template index 4a35e2254b62f..37b70fe5bb6fd 100644 --- a/srcpkgs/zfs/template +++ b/srcpkgs/zfs/template @@ -1,7 +1,7 @@ # Template file for 'zfs' pkgname=zfs version=2.2.1 -revision=1 +revision=2 build_style=gnu-configure configure_args="--with-config=user --with-mounthelperdir=/usr/bin --with-udevdir=/usr/lib/udev --with-udevruledir=/usr/lib/udev/rules.d