Hot on the heels of v1, here's the updated set. The main difference here is ensuring that ->opcode is stable for deferred (async or just linked) execution. Doesn't help that we fully prep commands, if the reissue ends up reading sqe fields again to figure out which command it is. I think this improves it all around, and it makes me more comfortable with the persistent state. There's three patches that deal with poll add/remove, cancel async, and timeout remove. Those are the three commands we still missed that need to retain state across a deferral, and then a patch that stuffs sqe->opcode in a io_kiocb hole, and ensures we assign ->opcode and ->user_data when we retrieve the SQE. Lastly, a patch that adds a warning about new commands that don't have a prep handler. We need that for ANY command that reads sqe fields, which is all of them obviously except NOP. I dropped Pavel's submit-and-wait patch for now, hoping he'll send a new one tomorrow and I'll get that added fs/io-wq.c | 2 +- fs/io_uring.c | 692 ++++++++++++++++++++++++++++++++++---------------- 2 files changed, 470 insertions(+), 224 deletions(-) -- Jens Axboe