Patent ID: 7512143

Claim:
A method comprising: receiving an allocate request from a queue pair; finding a free buffer associated with an entry in a free pool; determining whether a number of buffers allocatable to the queue pair is greater than zero; deciding whether a number of buffers allocated to an operation type is less than a maximum; allocating the free buffer to the queue pair if the queue pair requests the free buffer for an operation having the operation type, the number of buffers allocatable to the queue pair is greater than zero, and the number of buffers allocated to the operation type is less than a maximum, wherein the allocating further comprises setting an identifier of the queue pair into the entry in the free pool and setting status in the entry in the free pool, wherein the setting the status in the entry in the free pool further comprises setting a use of the free buffer in the entry; receiving a validate request and a provided queue pair identifier from a direct memory access engine, wherein the validate request is associated with a data transfer that uses the free buffer; in response to the receiving the validate request from the direct memory access engine, determining whether the provided queue pair identifier matches the queue pair identifier in the entry in the free pool, determining whether a requester of the data transfer matches the identifier of the queue pair in the entry in the free pool, and determining whether provided status provided by the requestor matches the status in the entry in the free pool; if the provided queue pair identifier matches the queue pair identifier in the entry in the free pool, the requester of the data transfer matches the identifier of the queue pair in the entry in the free pool, and the provided status provided by the requestor matches the status in the entry in the free pool, returning an indication of a successful validation; if the provided queue pair identifier does not match the queue pair identifier in the entry in the free pool, returning an error to the direct memory access engine; if the requester of the data transfer does not match the identifier of the queue pair in the entry in the free pool, returning the error to the direct memory access engine; and if the provided status provided by the requestor does not match the status in the entry in the free pool, returning the error to the direct memory access engine.