From c81e37f15db3329edcbb2f9c45cc626720cc53af Mon Sep 17 00:00:00 2001 From: Tony Hutter Date: Thu, 29 May 2025 15:27:39 -0700 Subject: [PATCH] [zfs-2.2.8] Revert "vdev_disk: default to classic submission for 2.2.x" This reverts commit eebf00bee91de2c7b7d03a9c1e5e2f3e5fd66c9e. Classic mode is causing assertions on both this branch and master: VERIFY3(page_count(page) > 0) failed (0 > 0) PANIC at abd_os.c:1069:bio_map() Signed-off-by: Tony Hutter --- man/man4/zfs.4 | 31 +++++++++---------------------- module/os/linux/zfs/vdev_disk.c | 8 +++----- 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/man/man4/zfs.4 b/man/man4/zfs.4 index 4f7b9cdce..1d734d865 100644 --- a/man/man4/zfs.4 +++ b/man/man4/zfs.4 @@ -1390,30 +1390,17 @@ This parameter only applies on Linux. This parameter is ignored if .Sy zfs_vdev_disk_classic Ns = Ns Sy 1 . . -.It Sy zfs_vdev_disk_classic Ns = Ns 0 Ns | Ns Sy 1 Pq uint -Controls the method used to submit IO to the Linux block layer -(default -.Sy 1 "classic" Ns -) -.Pp -If set to 1, the "classic" method is used. -This is the method that has been in use since the earliest versions of -ZFS-on-Linux. -It has known issues with highly fragmented IO requests and is less efficient on -many workloads, but it well known and well understood. -.Pp -If set to 0, the "new" method is used. -This method is available since 2.2.4 and should resolve all known issues and be -far more efficient, but has not had as much testing. -In the 2.2.x series, this parameter defaults to 1, to use the "classic" method. -.Pp -It is not recommended that you change it except on advice from the OpenZFS -developers. -If you do change it, please also open a bug report describing why you did so, +.It Sy zfs_vdev_disk_classic Ns = Ns Sy 0 Ns | Ns 1 Pq uint +If set to 1, OpenZFS will submit IO to Linux using the method it used in 2.2 +and earlier. +This "classic" method has known issues with highly fragmented IO requests and +is slower on many workloads, but it has been in use for many years and is known +to be very stable. +If you set this parameter, please also open a bug report why you did so, including the workload involved and any error messages. .Pp -This parameter and the "classic" submission method will be removed in a future -release of OpenZFS once we have total confidence in the new method. +This parameter and the classic submission method will be removed once we have +total confidence in the new method. .Pp This parameter only applies on Linux, and can only be set at module load time. . diff --git a/module/os/linux/zfs/vdev_disk.c b/module/os/linux/zfs/vdev_disk.c index a1d03188d..e27d7346a 100644 --- a/module/os/linux/zfs/vdev_disk.c +++ b/module/os/linux/zfs/vdev_disk.c @@ -963,10 +963,8 @@ vdev_disk_io_rw(zio_t *zio) /* * This is the classic, battle-tested BIO submission code. Until we're totally * sure that the new code is safe and correct in all cases, this will remain - * available. - * - * It is enabled by setting zfs_vdev_disk_classic=1 at module load time. It is - * enabled (=1) by default since 2.2.4, and disabled by default (=0) on master. + * available and can be enabled by setting zfs_vdev_disk_classic=1 at module + * load time. * * These functions have been renamed to vdev_classic_* to make it clear what * they belong to, but their implementations are unchanged. @@ -1516,7 +1514,7 @@ vdev_disk_rele(vdev_t *vd) * BIO submission method. See comment above about vdev_classic. * Set zfs_vdev_disk_classic=0 for new, =1 for classic */ -static uint_t zfs_vdev_disk_classic = 1; /* default classic */ +static uint_t zfs_vdev_disk_classic = 0; /* default new */ /* Set submission function from module parameter */ static int