Re: Re: [PATCH RFC 0/4] use scatter lists for all block pc requests and simplify hw handlers

James Bottomley
2005-06-07T19:23:49Z

On Tue, 2005-06-07 at 19:26 +0300, Kai Makisara wrote:
> No, it can't do that. If the user submits one SCSI command, it must result
> in one SCSI command to the device. Otherwise the effect is not what the
> user wants. (You can split a multiple block read/write but this does not
> apply to all commands.)

Yes, I agree ... we have to have a single request.

> Michael's question is important. The number of sg segments a HBA supports
> determines the maximum SCSI data size. In some cases (e.g., tape
> reads and writes with multimegabyte blocks) using page size (e.g., 4 kB)
> segments does not allow large enough data size. One solution has been to
> have a kernel space buffer that consists of segments spanning several
> pages. As far as I know, the current bio code requires page size segments.
> It is possible to use chained bios with multimegabyte buffers but the
> user should be sure that the split segments will be merged before the
> request reaches the HBA so that the request fits the HBA sg segment limit.

Well, this isn't actually necessarily the problem. *Provided* the
underlying driver enables clustering, the block layer will merge
physically contiguous pages in a single bio (so a large buffer will come
out the other side of blk_rq_map_sg as a single scatter/gather entry)

James