Mark Lord wrote:
Jens / Jeff, Each libata driver registers a .dma_boundary field with SCSI. This field is used to prevent merging of bio segments across a hardware limitation boundary, usually 0xffff. This looks like it works for regular block I/O, but I'm not so sure about SGIO originated requests. Any thoughts, or code you can point me to?
Everything goes through the block layer, including SG_IO, so everyone agrees on the boundaries that must be respected.
scsi sets blk_queue_segment_boundary() then gets out of the way, for the most part. BIOVEC_SEG_BOUNDARY() is the macro that accesses this. Trace back and forth from there. You will probably run into a call to blk_recount_segments() in __bio_add_page(), or maybe you'll check the seg boundary from another path.
Jeff - : send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html