io_uring: improve rsrc quiesce refs checks
Do a little bit of refactoring of io_rsrc_ref_quiesce(), flatten the data refs checks and so get rid of a conditional weird unlock-else-break construct. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/d21283e9f88a77612c746ed526d86fe3bfb58a70.1669821213.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
618d653a34
commit
0ced756f64
@ -330,17 +330,14 @@ __cold static int io_rsrc_ref_quiesce(struct io_rsrc_data *data,
|
||||
ret = wait_for_completion_interruptible(&data->done);
|
||||
if (!ret) {
|
||||
mutex_lock(&ctx->uring_lock);
|
||||
if (atomic_read(&data->refs) > 0) {
|
||||
/*
|
||||
* it has been revived by another thread while
|
||||
* we were unlocked
|
||||
*/
|
||||
mutex_unlock(&ctx->uring_lock);
|
||||
} else {
|
||||
if (atomic_read(&data->refs) <= 0)
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* it has been revived by another thread while
|
||||
* we were unlocked
|
||||
*/
|
||||
mutex_unlock(&ctx->uring_lock);
|
||||
}
|
||||
|
||||
reinit:
|
||||
atomic_inc(&data->refs);
|
||||
/* wait for all works potentially completing data->done */
|
||||
|
Loading…
Reference in New Issue
Block a user