On 8/31/23 1:42 AM, Ming Lei wrote:
quoted hunk ↗ jump to hunk
@@ -3313,11 +3323,12 @@ __cold void io_uring_cancel_generic(bool cancel_all, struct io_sq_data *sqd)
atomic_inc(&tctx->in_cancel);
do {
bool loop = false;
+ bool wq_cancelled;
Minor nit, but io_uring generally uses US spelling, so this should be
wq_canceled.
io_uring_drop_tctx_refs(current);
/* read completions before cancelations */
inflight = tctx_inflight(tctx, !cancel_all);
- if (!inflight)
+ if (!inflight && !tctx->io_wq)
break;
Not sure I follow this one, is it just for checking of io_wq was ever
setup? How could it not be?
- if (loop) {
+ if (!wq_cancelled || (inflight && loop)) {
cond_resched();
continue;
}
And this one is a bit puzzling to me too - if we didn't cancel anything
but don't have anything inflight, why are we looping? Should it be
something ala:
if (inflight && (!wq_cancelled || loop)) {
?
--
Jens Axboe