Subject: Re: [RFC][PATCH 1/1] cxgb3i: cxgb3 iSCSI initiator

From: Andrew Gallatin <[email-masked]>
Date: Fri, 15 Aug 2008 08:19:30 -0400

David Miller wrote:
 > From: Andrew Gallatin <[email-masked]>
 > Date: Thu, 14 Aug 2008 16:45:57 -0400
 >
 >> Speaking of stateless data placement.  Assume you have a page or set
 >> of pages allocated by a network driver which contain exactly the data
 >> a block driver is interested in to fulfill a read request (eg, the NIC
 >> understands the protocol just well enough to split headers).  Is it
 >> possible in the block driver to simply replace the pages that are
 >> attached to the buf with pages allocated by the network driver?
 >>
 >> It was my impression that the pages associated with a buf are in
 >> fairly magical states and that you cannot replace them.
 >
 > This, if true, would be quite easy to rectify.

That's great news.

The reason I think this is because a few months ago, I tried to make
the AOE block driver zero-copy on read.  I modified the myri10ge
ethernet driver and firmware to split AOE headers, so that the AOE
read data started nicely aligned in a page allocated by myri10ge.
(this obviously only works for for jumbo MTUs..).  This part was
trivial, but I got bogged down trying to figure out how to replace the
buf associated pages in the AOE driver, as they seemed to be in
various states of entanglement with the LRU and page caches.

I'm more of a network driver guy, and my lack of understanding of the
block layer and page cache probably made me give up too quickly.  I'll
dust off this work and ask for help.

Thanks,

Drew