On 3/4/24 3:18 PM, Pavel Begunkov wrote: > On 3/4/24 22:07, Pavel Begunkov wrote: >> On 3/1/24 03:45, Jens Axboe wrote: >>> On 2/29/24 9:36 AM, Pavel Begunkov wrote: >>>> With defer taskrun we store aux cqes into a cache array and then flush >>>> into the CQ, and we also maintain the ordering so aux cqes are flushed >>>> before request completions. Why do we need the cache instead of pushing >>>> them directly? We acutally don't, so let's kill it. >>>> >>>> One nuance is synchronisation -- the path we touch here is only for >>>> DEFER_TASKRUN and guaranteed to be executed in the task context, and >>>> all cqe posting is serialised by that. We also don't need locks because >>>> of that, see __io_cq_lock(). >>> >>> Nicely spotted! Looks good to me. >> >> Apparently I'm wrong as "defer" in that function is not about >> defer taskrun, but rather IO_URING_F_COMPLETE_DEFER. Jens, can >> you drop it for now? Dropped > One way forward would be to limit the aux fast path to defer > taskrun, I don't really care about other cases, and aux is > mostly useful for multishots hence net, which should preferably > be DEFER_TASKRUN. I think that'd be fine. > In any case the code is a bit unhandy if not smelly, can use > some refactoring. For sure. -- Jens Axboe