Skip to content

Commit

Permalink
zfs: default disable zfs_dmu_offset_next_sync to avoid data corruption
Browse files Browse the repository at this point in the history
This helps mitigate a data corruption bug. This was previously defaulted
to zero prior to upstream commit
05b3eb6d232009db247882a39d518e7282630753, and it is already a tunable,
so doing this seems safe. Initially data corruption was thought to be
introduced with v2.2, but further upstream investigation currently
believes that changes in v2.2 only exacerbated the issue that already
existed.

A longer-term fix is likely to be
openzfs/zfs#15571, though that is not yet
merged. The zfs_2_1 package has already backported that, so do not apply
the tunable default change there.

Positioning of `extraPatches` is to avoid merge conflicts with
NixOS#269097.

Patch is nearly identical to the [Gentoo][1] patch, but better patch
formatting.

See openzfs/zfs#11900
See openzfs/zfs#15526

[1]: https://gitweb.gentoo.org/repo/gentoo.git/tree/sys-fs/zfs-kmod/files/zfs-kmod-2.2.1-Disable-zfs_dmu_offset_next_sync-tunable-by-default.patch
  • Loading branch information
amarshall committed Nov 26, 2023
1 parent 5689f24 commit 9670ddc
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
From 3ba4ff328ab001d88d7714087d8a89687bc68312 Mon Sep 17 00:00:00 2001
From: Andrew Marshall <andrew@johnandrewmarshall.com>
Date: Sun, 26 Nov 2023 12:46:18 -0500
Subject: [PATCH] Disable zfs_dmu_offset_next_sync tunable by default

This helps mitigate a data corruption bug. This was previously defaulted
to zero, so doing so seems safe.

See https://github.com/openzfs/zfs/issues/11900
See https://github.com/openzfs/zfs/issues/15526
---
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 4ec52a2fb..2a69a8f54 100644
--- a/man/man4/zfs.4
+++ b/man/man4/zfs.4
@@ -1660,7 +1660,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 ddb29020b..5d37b6f92 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.42.0

4 changes: 4 additions & 0 deletions pkgs/os-specific/linux/zfs/stable.nix
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ callPackage ./generic.nix args {
# this package should point to the latest release.
version = "2.2.0";

extraPatches = [
./patches/disable-zfs-dmu-offset-next-sync-by-default-v2-2.patch
];

tests = [
nixosTests.zfs.installer
nixosTests.zfs.stable
Expand Down
4 changes: 4 additions & 0 deletions pkgs/os-specific/linux/zfs/unstable.nix
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,8 @@ callPackage ./generic.nix args {
tests = [
nixosTests.zfs.unstable
];

extraPatches = [
./patches/disable-zfs-dmu-offset-next-sync-by-default-v2-2.patch
];
}

0 comments on commit 9670ddc

Please sign in to comment.