On 4/13/21 1:20 AM, Hao Xu wrote: > Now that we have multishot poll requests, one SQE can emit multiple > CQEs. given below example: > sqe0(multishot poll)-->sqe1-->sqe2(drain req) > sqe2 is designed to issue after sqe0 and sqe1 completed, but since sqe0 > is a multishot poll request, sqe2 may be issued after sqe0's event > triggered twice before sqe1 completed. This isn't what users leverage > drain requests for. > Here the solution is to wait for multishot poll requests fully > completed. > To achieve this, we should reconsider the req_need_defer equation, the > original one is: > > all_sqes(excluding dropped ones) == all_cqes(including dropped ones) > > This means we issue a drain request when all the previous submitted > SQEs have generated their CQEs. > Now we should consider multishot requests, we deduct all the multishot > CQEs except the cancellation one, In this way a multishot poll request > behave like a normal request, so: > all_sqes == all_cqes - multishot_cqes(except cancellations) > > Here we introduce cq_extra for it. Thanks, applied this and the test case. -- Jens Axboe