Thread (7 messages) 7 messages, 3 authors, 2023-09-01

Re: [PATCH] io_uring: fix IO hang in io_wq_put_and_exit from do_exit()

From: Jens Axboe <axboe@kernel.dk>
Date: 2023-08-31 17:59:47
Also in: io-uring

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help