• Steffen Maier's avatar
    scsi: zfcp: fix sysfs block queue limit output for max_segment_size · b6319569
    Steffen Maier authored
    Since v2.6.35 commit 68322984 ("[SCSI] zfcp: Report scatter-gather
    limits to SCSI and block layer"), zfcp set dma_parms.max_segment_size ==
    PAGE_SIZE (but without using the setter dma_set_max_seg_size()) and
    scsi_host_template.dma_boundary == PAGE_SIZE - 1.
    
    v5.0-rc1 commit 50c2e910 ("scsi: introduce a max_segment_size
    host_template parameters") introduced a new field
    scsi_host_template.max_segment_size. If an LLDD such as zfcp does not set
    it, scsi_host_alloc() uses BLK_MAX_SEGMENT_SIZE = 65536 for
    Scsi_Host.max_segment_size. __scsi_init_queue() announced the minimum of
    Scsi_Host.max_segment_size and dma_parms.max_segment_size to the block
    layer. For zfcp: min(65536, 4096) == 4096 which was still good.
    
    v5.0 commit a8cf59a6 ("scsi: communicate max segment size to the DMA
    mapping code") announces Scsi_Host.max_segment_size to the block layer and
    overwrites dma_parms.max_segment_size with Scsi_Host.max_segment_size.  For
    zfcp dma_parms.max_segment_size == Scsi_Host.max_segment_size == 65536
    which is also reflected in block queue limits.
    
    $ cd /sys/bus/ccw/drivers/zfcp
    $ cd 0.0.3c40/host5/rport-5:0-4/target5:0:4/5:0:4:10/block/sdi/queue
    $ cat max_segment_size
    65536
    
    Zfcp I/O still works because dma_boundary implicitly still keeps the
    effective max segment size <= PAGE_SIZE.  However, dma_boundary does not
    seem visible to user space, but max_segment_size is visible and shows a
    misleading wrong value.  Fix it and inherit the stable tag of a8cf59a6.
    
    Devices on our bus ccw support DMA but no DMA mapping. Of multiple device
    types on the ccw bus, only zfcp needs dma_parms for SCSI limits.  So, leave
    dma_parms setup in zfcp and do not move it to the bus.
    Signed-off-by: default avatarSteffen Maier <maier@linux.ibm.com>
    Fixes: 50c2e910 ("scsi: introduce a max_segment_size host_template parameters")
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    b6319569
zfcp_scsi.c 25.1 KB