[EMAIL PROTECTED] wrote on Sun, 04 May 2008 11:21 +0300:
> Pete Wyckoff wrote:
> > [EMAIL PROTECTED] wrote on Mon, 28 Apr 2008 11:20 -0500:
> >> Erez Zilber wrote:
> >>> I understand that IB's requirements are too difficult to force. I guess
> >>> that we will do something like:
> >>>
> >>>     * If the scatterlist is aligned, just use it as is.
> >>>     * If some elements at the beginning/end of the scatterlist are
> >>>       unaligned, we can copy only them (and use the rest of the
> >>>       scatterlist as is). We saw that sometimes (e.g. GFS), only the 1st
> >>>       element is unaligned, so copying the whole data is unnecessary.
> >>>     * Else, copy the whole scatterlist to buffers that iSER allocates.
> >>>       This is what we do today with unaligned buffers.
> >>>
> >>>       
> >> Pete, we are discissing the dma_alignment patch you sent. Above are the 
> >> dma 
> >> restrictions the iser driver has right now. For the 3rd requirement does 
> >> that mean we want to set the alignment to be page aligned right?
> >>     
> >
> > Erez's alignment rules leave out one case:  when the sg list
> > has only one element, there are no restrictions on start/end
> > alignment.
> >   
> 
> Yeah, this is the trivial case (which is already covered in the iSER code).
> 
> > The iser alignment requirements are too complex to express with the
> > q->dma_alignment approach.  In iser, as Erez suggests, bouncing can
> > be done.  His second (*) would be a nice addition that would
> > definitely help some of our apps.
> >   
> 
> We will try to send a patch for that soon.
> 
> > My patch "iscsi iser: remove DMA alignment restriction" changes
> > iser to make the alignment 0, rather than the default 512, to avoid
> > the bounce buffering in __blk_rq_map_user().
> 
> Just to make sure that I understand - "alignment 0 " means that the
> block layer doesn't care at all about alignment?

Yep.  The lines to think about are in __blk_rq_map_user:

        alignment = queue_dma_alignment(q) | q->dma_pad_mask;
        if (!(uaddr & alignment) && !(len & alignment))
                bio = bio_map_user(q, NULL, uaddr, len, reading);
        else
                bio = bio_copy_user(q, uaddr, len, reading);

As it stands, queue_dma_alignment(q) returns 511.  That forces the
use of the bio_copy_user path for anything that isn't aligned (start
and end) on a 512 byte boundary.  Changing it to page alignment
isn't what we want either.  Zero disables the copy path, and lets
iser do everything.  You can add printks and test my patch using sg
or bsg to submit from userspace, to see.

                -- Pete

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"open-iscsi" group.
To post to this group, send email to open-iscsi@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/open-iscsi
-~----------~----~----~----~------~----~------~--~---

Reply via email to