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 without it since it is the last case of the switch statement... I am not sure what kernel coding standard says about that. 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. Greetings,