]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.6-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 27 Aug 2024 13:17:18 +0000 (15:17 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 27 Aug 2024 13:17:18 +0000 (15:17 +0200)
added patches:
revert-s390-dasd-establish-dma-alignment.patch

queue-6.6/revert-s390-dasd-establish-dma-alignment.patch [new file with mode: 0644]
queue-6.6/series

diff --git a/queue-6.6/revert-s390-dasd-establish-dma-alignment.patch b/queue-6.6/revert-s390-dasd-establish-dma-alignment.patch
new file mode 100644 (file)
index 0000000..e538339
--- /dev/null
@@ -0,0 +1,96 @@
+From hoeppner@linux.ibm.com  Tue Aug 27 15:13:30 2024
+From: "Jan Höppner" <hoeppner@linux.ibm.com>
+Date: Tue, 20 Aug 2024 16:13:07 +0200
+Subject: Revert "s390/dasd: Establish DMA alignment"
+To: gregkh@linuxfoundation.org
+Cc: stable@vger.kernel.org, sth@linux.ibm.com
+Message-ID: <20240820141307.2869182-1-hoeppner@linux.ibm.com>
+
+From: "Jan Höppner" <hoeppner@linux.ibm.com>
+
+This reverts commit bc792884b76f ("s390/dasd: Establish DMA alignment").
+
+Quoting the original commit:
+    linux-next commit bf8d08532bc1 ("iomap: add support for dma aligned
+    direct-io") changes the alignment requirement to come from the block
+    device rather than the block size, and the default alignment
+    requirement is 512-byte boundaries. Since DASD I/O has page
+    alignments for IDAW/TIDAW requests, let's override this value to
+    restore the expected behavior.
+
+I mentioned TIDAW, but that was wrong. TIDAWs have no distinct alignment
+requirement (per p. 15-70 of POPS SA22-7832-13):
+
+   Unless otherwise specified, TIDAWs may designate
+   a block of main storage on any boundary and length
+   up to 4K bytes, provided the specified block does not
+   cross a 4 K-byte boundary.
+
+IDAWs do, but the original commit neglected that while ECKD DASD are
+typically formatted in 4096-byte blocks, they don't HAVE to be. Formatting
+an ECKD volume with smaller blocks is permitted (dasdfmt -b xxx), and the
+problematic commit enforces alignment properties to such a device that
+will result in errors, such as:
+
+   [test@host ~]# lsdasd -l a367 | grep blksz
+     blksz:                            512
+   [test@host ~]# mkfs.xfs -f /dev/disk/by-path/ccw-0.0.a367-part1
+   meta-data=/dev/dasdc1            isize=512    agcount=4, agsize=230075 blks
+            =                       sectsz=512   attr=2, projid32bit=1
+            =                       crc=1        finobt=1, sparse=1, rmapbt=1
+            =                       reflink=1    bigtime=1 inobtcount=1 nrext64=1
+   data     =                       bsize=4096   blocks=920299, imaxpct=25
+            =                       sunit=0      swidth=0 blks
+   naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
+   log      =internal log           bsize=4096   blocks=16384, version=2
+            =                       sectsz=512   sunit=0 blks, lazy-count=1
+   realtime =none                   extsz=4096   blocks=0, rtextents=0
+   error reading existing superblock: Invalid argument
+   mkfs.xfs: pwrite failed: Invalid argument
+   libxfs_bwrite: write failed on (unknown) bno 0x70565c/0x100, err=22
+   mkfs.xfs: Releasing dirty buffer to free list!
+   found dirty buffer (bulk) on free list!
+   mkfs.xfs: pwrite failed: Invalid argument
+   ...snipped...
+
+The original commit omitted the FBA discipline for just this reason,
+but the formatted block size of the other disciplines was overlooked.
+The solution to all of this is to revert to the original behavior,
+such that the block size can be respected.
+
+But what of the original problem? That was manifested with a direct-io
+QEMU guest, where QEMU itself was changed a month or two later with
+commit 25474d90aa ("block: use the request length for iov alignment")
+such that the blamed kernel commit is unnecessary.
+
+Note: This is an adapted version of the original upstream commit
+2a07bb64d801 ("s390/dasd: Remove DMA alignment").
+
+Cc: stable@vger.kernel.org # 6.0+
+Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/s390/block/dasd_diag.c |    1 -
+ drivers/s390/block/dasd_eckd.c |    1 -
+ 2 files changed, 2 deletions(-)
+
+--- a/drivers/s390/block/dasd_diag.c
++++ b/drivers/s390/block/dasd_diag.c
+@@ -639,7 +639,6 @@ static void dasd_diag_setup_blk_queue(st
+       /* With page sized segments each segment can be translated into one idaw/tidaw */
+       blk_queue_max_segment_size(q, PAGE_SIZE);
+       blk_queue_segment_boundary(q, PAGE_SIZE - 1);
+-      blk_queue_dma_alignment(q, PAGE_SIZE - 1);
+ }
+ static int dasd_diag_pe_handler(struct dasd_device *device,
+--- a/drivers/s390/block/dasd_eckd.c
++++ b/drivers/s390/block/dasd_eckd.c
+@@ -6888,7 +6888,6 @@ static void dasd_eckd_setup_blk_queue(st
+       /* With page sized segments each segment can be translated into one idaw/tidaw */
+       blk_queue_max_segment_size(q, PAGE_SIZE);
+       blk_queue_segment_boundary(q, PAGE_SIZE - 1);
+-      blk_queue_dma_alignment(q, PAGE_SIZE - 1);
+ }
+ static struct ccw_driver dasd_eckd_driver = {
index 803340633b0e99784e712cbab8e1db6f1ca97382..6a7ffdf7fca3b97065edf89c3d608b4416af664c 100644 (file)
@@ -337,3 +337,4 @@ drm-amdgpu-vcn-identify-unified-queue-in-sw-init.patch
 drm-amdgpu-vcn-not-pause-dpg-for-unified-queue.patch
 ksmbd-fix-race-condition-between-destroy_previous_session-and-smb2-operations.patch
 net-ngbe-fix-phy-mode-set-to-external-phy.patch
+revert-s390-dasd-establish-dma-alignment.patch