On 02/02/2021 20:48, Jens Axboe wrote: > On 2/2/21 1:34 PM, Pavel Begunkov wrote: >> On 02/02/2021 17:41, Pavel Begunkov wrote: >>> On 02/02/2021 17:24, Jens Axboe wrote: >>>> On 2/2/21 10:10 AM, Victor Stewart wrote: >>>>>> Can you send the updated test app? >>>>> >>>>> https://gist.github.com/victorstewart/98814b65ed702c33480487c05b40eb56 >>>>> >>>>> same link i just updated the same gist >>>> >>>> And how are you running it? >>> >>> with SQPOLL with FIXED FLAG -> FAILURE: failed with error = ??? >>> -> io_uring_wait_cqe_timeout() strangely returns -1, (-EPERM??) >> >> Ok, _io_uring_get_cqe() is just screwed twice >> >> TL;DR >> we enter into it with submit=0, do an iteration, which decrements it, >> then a second iteration passes submit=-1, which is returned back by >> the kernel as a result and propagated back from liburing... > > Yep, that's what I came up with too. We really just need a clear way > of knowing when to break out, and when to keep going. Eg if we've > done a loop and don't end up calling the system call, then there's > no point in continuing. We can bodge something up (and forget about it), and do much cleaner for IORING_FEAT_EXT_ARG, because we don't have LIBURING_UDATA_TIMEOUT reqs for it and so can remove peek and so on. -- Pavel Begunkov