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. > : > :Cheers. > > 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 > parallel. > > 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 Thanks.
