On Mon, 26 Nov 2018, Christoph Hellwig wrote: > On Thu, Nov 22, 2018 at 09:02:13AM +1100, Finn Thain wrote: > > > you in the To list maintain or wrote SCSI drivers that set the > > > DISABLE_CLUSTERING flag, which basically disable merges of any > > > bio segments. We already have the actual max_segment size limit > > > to say which length a segment should have, independent of merged > > > or originally created, so this limit generally should rarely if > > > ever be required, and mostly is an old cut an paste error. > > > > > > > Are you referring to > > blk_queue_max_segment_size(q, dma_get_max_seg_size(dev)); > > in drivers/scsi/scsi_lib.c? > > > > Is the segment size limitation of the DMA controller the only reason to > > want DISABLE_CLUSTERING? > > DISABLE_CLUSTERING mixes up two not really related things: > > 1) limit the size of each segment to a single page size > 2) limit each segment to not actually span a page boundary. > > Both could be valid limit for DMA engines, but also might be particularly > relevant for pio, if you e.g. kmap each page of a scatterlist do do > pio you'd want to see both limits. > I looked through all the drivers based on esp_scsi.c and NCR5380.c which use DISABLE_CLUSTERING. There is one driver that uses DMA and sometimes kmap too, which is am53c974.c. It defaults to ENABLE_CLUSTERING, which would seem to be a bug if kmap isn't compatible with that (Hannes?). For g_NCR5380.c (ISA bus) and dmx3191d.c (PCI bus) these drivers need DISABLE_CLUSTERING because apparently they don't use kmap or DMA. This will need to be addressed if you remove DISABLE_CLUSTERING. Then we have the ARM drivers, cumana_1.c and oak.c. I believe that ecard drivers like these are only used with CONFIG_ARCH_RPC, and I think that would imply !CONFIG_HIGHMEM (Russell?). m68k that doesn't seem to have CONFIG_HIGHMEM either, so no need for kmap or DISABLE_CLUSTERING when doing PIO or PDMA. That includes mac_esp.c and mac_scsi.c. Michael has already answered for atari_scsi.c. That leaves the Sun 3 drivers, sun3_scsi.c and sun3_scsi_vme.c, which may have DMA limitations I don't know about (Sam?). --