On 17/01/2021 02:31, Hillf Danton wrote:
> On Sat, 16 Jan 2021 05:32:30 +0000 Pavel Begunkov wrote:
>>
>> @@ -9126,7 +9126,10 @@ static int io_uring_flush(struct file *file, void 
>> *data)
>>  
>>      if (ctx->flags & IORING_SETUP_SQPOLL) {
>>              /* there is only one file note, which is owned by sqo_task */
>> -            WARN_ON_ONCE((ctx->sqo_task == current) ==
>> +            WARN_ON_ONCE(ctx->sqo_task != current &&
>> +                         xa_load(&tctx->xa, (unsigned long)file));
>> +            /* sqo_dead check is for when this happens after cancellation */
>> +            WARN_ON_ONCE(ctx->sqo_task == current && !ctx->sqo_dead &&
>>                           !xa_load(&tctx->xa, (unsigned long)file));
>>  
>>              io_disable_sqo_submit(ctx);
> 
> The added sqo_dead flag can not only quiesce a warning but save a
> disabling dryrun.

Don't think I get the sentence. Do you see any issue?

sqo_dead has a practical meaning, it prevents SQPOLL task from poking
into the creator task when it's racy. But yes, also in some cases makes
draining and killing rings nicer. 

-- 
Pavel Begunkov

Reply via email to