Merge pull request #270275 from amarshall/zfs-disable-dmu-offset-by-default

zfs: default disable zfs_dmu_offset_next_sync to avoid data corruption
This commit is contained in:
Adam C. Stephens 2023-11-27 08:35:28 -05:00 committed by GitHub
commit c9b87a5dfa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 52 additions and 0 deletions

View file

@ -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

View file

@ -28,6 +28,10 @@ callPackage ./generic.nix args {
# this package should point to the latest release.
version = "2.2.1";
extraPatches = [
./patches/disable-zfs-dmu-offset-next-sync-by-default-v2-2.patch
];
tests = [
nixosTests.zfs.installer
nixosTests.zfs.stable

View file

@ -35,4 +35,8 @@ callPackage ./generic.nix args {
tests = [
nixosTests.zfs.unstable
];
extraPatches = [
./patches/disable-zfs-dmu-offset-next-sync-by-default-v2-2.patch
];
}