DragonFly bugs List (threaded) for 2007-07
Re: ccd on NATA problem - ata0: FAILURE - oversized DMA transfer attempt 73728 > 65536
On Mon, Jul 09, 2007 at 10:48:17AM -0700, Matthew Dillon wrote:
> :IIUC, in old-ATA, ad_strategy took care of transfer sizes larger than
> :the maximum I/O size of the device, but not in NATA (I guess GEOM layer
> :is handling it, right?). Adjusting si_iosize_max (initially faked to
> :be 131072 when attached) in ccdinit() seems to work around this problem.
> There's even an XXX comment next to that assignment. At the time
> that assignment is made the CCD hasn't loaded its components yet
> so we do not know what the actual limitations are.
> CCD has an iterator in ccdstart() to deal with components. I think
> what we need to do is to add some logic to ccdbuffer() to incorporate
> the limits of the lower level device.
> So, please try this patch. I've included a kprintf() so we can get
> positive confirmation that it actually does what it is supposed to.
> The advantage of this patch is that it does not artificially limit
> the max iosize for the CCD request itself. e.g. if a person happens
> to configure an interleave of 64K across two disks CCD which are
> each limited to 64K I/O's, CCD will still process a 128K I/O in
> Please note this patch is almost completely untested.
It worked fine as I tested lightly(-j2 buildworld). I'll try to test later
with different max iosize of component devices.
> Index: sys/ccdvar.h