This series needs a new pair of eyes for review. I'm probably missing things here after seeing it many times.
posix-aio-compat.c:handle_work() doesn't need to take aiocb_mutex for container_of(), which just calculates an address but doesn't actually access the aiocb. dequeue_work_on_queue() is incorrect because a threadlet_worker() may remove the work item from the request_list just before we remove it again. That double-remove is wrong and by not detecting this case we return success even though the work function may be running concurrently (and it's not safe to do anything with the work item at this time!). Dequeue needs to lock the request_list, test if the item is still on the list, remove it if necessary, and return whether or not it was removed. Stefan