Douglas Gilbert wrote: > Benny Halevy wrote: >> Douglas Gilbert wrote: > > Perhaps the right use of DMA_BIRECTIONAL needs to be > defined. > > Could it be used with a XDWRITE(10) SCSI command > defined in sbc3r07.pdf at http://www.t10.org ? I suspect > using two scatter gather lists would be a better approach. Exactly. This is a classic example of a bidirectional command and indeed two scatter-gather lists (that are mapped into two bio lists) are used. > >>>> - Introduce new blk_rq_init_unqueued_req() and use it in places ad-hoc >>>> requests were used and bzero'ed. >>> With a bi-directional transfer is it always unambiguous >>> which transfer occurs first (or could they occur at >>> the same time)? >> The bidi transfers can occur in any order and in parallel. > > Then it is not sufficient for modern SCSI transports in which > certain bidirectional commands (probably most) have a well > defined order. > > So DMA_BIDIRECTIONAL looks PCI specific and it may have > been a mistake to replace other subsystem's direction flags > with it. RDMA might be an interesting case. > I would say that it might make sense to define an equivalent for dma_data_direction at the block layer, for example: enum req_io_direction { REQ_IO_NONE = 0, REQ_IN_FROM_DEVICE = 1, REQ_OUT_TO_DEVICE = 2, REQ_BIDIRECTIONAL = 3, }; can be used in struct request and upper layers. Besides the fact that having separate I/O buffers for bidirectional transfers makes block I/O different from pci bidi I/O, this enum makes more sense "arithmetically" and has a much better meaning for the zero value. Today DMA_BIDIRECTIONAL is used in several places as the default and "invalid" value since no-one ever used it before. I'd rather have the value 0 mean REQ_IO_NONE (or REQ_IO_INVALID if we want such thing). Benny - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html