Implement GET_OP routine which guarantees to return an OP.
GET_OP function may be a blocking function which guarantees to return an RMA operation. Inside GET_OP we first call the normal OP_ALLOC function which will try to get a new OP from OP pools; if failed, we call nonblocking GC function to cleanup completed ops and then call OP_ALLOC again; if we still cannot get a new OP, we call nonblocking FREE_OP_BEFORE_COMPLETION function if hardware ordering is provided and then call OP_ALLOC again; if still failed, finally we call blocking aggressive cleanup function, which will guarantee to return a new OP element. Signed-off-by: Pavan Balaji <email@example.com>
Showing with 75 additions and 36 deletions