Patch "s390/dasd: Remove DMA alignment" has been added to the 6.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    s390/dasd: Remove DMA alignment

to the 6.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     s390-dasd-remove-dma-alignment.patch
and it can be found in the queue-6.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 1f91fdcda97a7ce0ddc29f039066320f53be0186
Author: Eric Farman <farman@xxxxxxxxxxxxx>
Date:   Mon Aug 12 14:57:32 2024 +0200

    s390/dasd: Remove DMA alignment
    
    [ Upstream commit 2a07bb64d80152701d507b1498237ed1b8d83866 ]
    
    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. There were two commits [1]
    that moved this code in the interim, so a straight git-revert is not
    possible, but the change is straightforward.
    
    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.
    
    [1] commit 0127a47f58c6 ("dasd: move queue setup to common code")
        commit fde07a4d74e3 ("dasd: use the atomic queue limits API")
    
    Fixes: bc792884b76f ("s390/dasd: Establish DMA alignment")
    Reviewed-by: Stefan Haberland <sth@xxxxxxxxxxxxx>
    Signed-off-by: Eric Farman <farman@xxxxxxxxxxxxx>
    Signed-off-by: Stefan Haberland <sth@xxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240812125733.126431-2-sth@xxxxxxxxxxxxx
    Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/s390/block/dasd_genhd.c b/drivers/s390/block/dasd_genhd.c
index 4533dd055ca8e..23d6e638f381d 100644
--- a/drivers/s390/block/dasd_genhd.c
+++ b/drivers/s390/block/dasd_genhd.c
@@ -41,7 +41,6 @@ int dasd_gendisk_alloc(struct dasd_block *block)
 		 */
 		.max_segment_size = PAGE_SIZE,
 		.seg_boundary_mask = PAGE_SIZE - 1,
-		.dma_alignment = PAGE_SIZE - 1,
 		.max_segments = USHRT_MAX,
 	};
 	struct gendisk *gdp;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux