Patent ID: 7924859

Claim:
A method for intermediate storage of a protocol data unit (“PDU”) received by an adapter operationally coupled to a network device and to a host system having a host memory, comprising: (a) receiving the PDU from the network device; wherein the PDU after being received is initially stored in a local memory for the adapter; (b) comparing a size of the PDU with a size of a small buffer from a small buffer pool maintained by a direct memory access (DMA) engine for the adapter; wherein the DMA engine manages a DMA channel for transferring the PDU to the host system memory and the DMA engine compares the PDU size with the size of the small buffer; (c) before transferring the PDU to the host system memory, placing the incoming PDU in the small buffer if the PDU fits in the small buffer; (d) if the PDU does not fit in the small buffer in step (b), determining if the PDU will fit in a large buffer from a large buffer pool maintained by the DMA engine that also determines if the PDU will fit in the large buffer; (e) before transferring the PDU to the host system memory, placing the incoming PDU in the large buffer if the incoming PDU will fit in the large buffer as determined in step (d); (f) placing the incoming PDU in more than one large buffer, if the incoming PDU size is greater than a size of the large buffer, as determined in step (d); (g) creating an indicator to a list of large buffers that are used to store the PDU in step (f); wherein the indicator is stored in a small buffer from the small buffer pool; and (h) notifying the host system whether the small buffer in step (c), the large buffer in step (e), or the more than one large buffer in step (f) is used for intermediate storage of the PDU.