On 6/22/21 8:05 PM, Olivier Langlois wrote: > On Tue, 2021-06-22 at 19:01 +0100, Pavel Begunkov wrote: >> On 6/22/21 6:54 PM, Pavel Begunkov wrote: >>> On 6/22/21 1:17 PM, Olivier Langlois wrote: >>>> >>> >>>> static bool __io_poll_remove_one(struct io_kiocb *req, >>>> @@ -6437,6 +6445,7 @@ static void __io_queue_sqe(struct io_kiocb >>>> *req) >>>> struct io_kiocb *linked_timeout = >>>> io_prep_linked_timeout(req); >>>> int ret; >>>> >>>> +issue_sqe: >>>> ret = io_issue_sqe(req, >>>> IO_URING_F_NONBLOCK|IO_URING_F_COMPLETE_DEFER); >>>> >>>> /* >>>> @@ -6456,12 +6465,16 @@ static void __io_queue_sqe(struct >>>> io_kiocb *req) >>>> io_put_req(req); >>>> } >>>> } else if (ret == -EAGAIN && !(req->flags & >>>> REQ_F_NOWAIT)) { >>>> - if (!io_arm_poll_handler(req)) { >>>> + switch (io_arm_poll_handler(req)) { >>>> + case IO_APOLL_READY: >>>> + goto issue_sqe; >>>> + case IO_APOLL_ABORTED: >>>> /* >>>> * Queued up for async execution, worker >>>> will release >>>> * submit reference when the iocb is >>>> actually submitted. >>>> */ >>>> io_queue_async_work(req); >>>> + break; >>> >>> Hmm, why there is a new break here? It will miscount >>> @linked_timeout >>> if you do that. Every io_prep_linked_timeout() should be matched >>> with >>> io_queue_linked_timeout(). >> >> Never mind, I said some nonsense and apparently need some coffee > > but this is a pertinant question, imho. I guess that you could get away It appeared to me that it doesn't go down to the end of the function but returns or so, that's the nonsense part. > without it since it is the last case of the switch statement... I am > not sure what kernel coding standard says about that. breaks are preferable, and falling through should be explicitly marked with fallthrough; > However, I can tell you that there was also a break statement at the > end of the case for IO_APOLL_READY and checkpatch.pl did complain about > it saying that it was useless since it was following a goto statement. > Therefore, I did remove that one. > > checkpatch.pl did remain silent about the other remaining break. Hence > this is why I left it there. -- Pavel Begunkov