Overall I'm worried by the complexity added in this patchset. There are 8 new fields in struct request and it has become a lot harder to follow the code. It seems to me that not all of sending_request/recursive_request/receive_response_queue_state should be necessary with the right queuing model.