Hi, On 24.04.19 00:07, Jens Axboe wrote: > On 4/23/19 2:31 PM, Jens Axboe wrote: >>> 1. An error for a submission should be returned as completion for that >>> submission. Please don't break my main event loop with strange error >>> codes just because a single operation is broken/not supported/... >> >> So that's the case I was referring to above. We can just make that change, >> there's absolutely no reason to have errors passed back through a different >> channel. > > Thinking about this a bit more, and I think the current approach is the > best one. The issue is that only submission side events tied to an sqe > can return an cqe, the rest have to be returned through the system call > value. So I think it's cleaner to keep it as-is, honestly. Not sure we're talking about the same. I'm talking about the errors returned by io_submit_sqe: io_submit_sqes (called by the SQ thread) calls io_cqring_add_event if there was an error, but io_ring_submit (called by io_uring_enter) doesn't: instead, if there were successfully submitted entries before, it will just return those (and "undo" the current SQE), otherwise it will return the error, which will then be returned by io_uring_enter. But if I get an error from io_uring_enter I have no idea whether it was some generic error (say EINVAL for broken flags or EBADF for a non-io-uring filedescriptor) or an error related to a single submission. I think io_ring_submit should call io_cqring_add_event on errors too (like io_submit_sqes), and not stop handling submissions (and never return an error). Maybe io_cqring_add_event could then even be moved to io_submit_sqe and just return whether the job is already done or not (io_submit_sqes returns the new "inflight" jobs, and io_ring_submit the total number of submitted jobs). cheers, Stefan