io_uring: refactor scheduling in io_cqring_wait
schedule_timeout() with timeout=MAX_SCHEDULE_TIMEOUT is guaranteed to work just as schedule(), so instead of hand-coding it based on arguments always use the timeout version and simplify code. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
9936c7c2bc
commit
c1d5a22468
|
@ -7213,9 +7213,8 @@ static int io_cqring_wait(struct io_ring_ctx *ctx, int min_events,
|
|||
.to_wait = min_events,
|
||||
};
|
||||
struct io_rings *rings = ctx->rings;
|
||||
struct timespec64 ts;
|
||||
signed long timeout = 0;
|
||||
int ret = 0;
|
||||
signed long timeout = MAX_SCHEDULE_TIMEOUT;
|
||||
int ret;
|
||||
|
||||
do {
|
||||
io_cqring_overflow_flush(ctx, false, NULL, NULL);
|
||||
|
@ -7239,6 +7238,8 @@ static int io_cqring_wait(struct io_ring_ctx *ctx, int min_events,
|
|||
}
|
||||
|
||||
if (uts) {
|
||||
struct timespec64 ts;
|
||||
|
||||
if (get_timespec64(&ts, uts))
|
||||
return -EFAULT;
|
||||
timeout = timespec64_to_jiffies(&ts);
|
||||
|
@ -7264,14 +7265,10 @@ static int io_cqring_wait(struct io_ring_ctx *ctx, int min_events,
|
|||
finish_wait(&ctx->wait, &iowq.wq);
|
||||
continue;
|
||||
}
|
||||
if (uts) {
|
||||
timeout = schedule_timeout(timeout);
|
||||
if (timeout == 0) {
|
||||
ret = -ETIME;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
schedule();
|
||||
timeout = schedule_timeout(timeout);
|
||||
if (timeout == 0) {
|
||||
ret = -ETIME;
|
||||
break;
|
||||
}
|
||||
} while (1);
|
||||
finish_wait(&ctx->wait, &iowq.wq);
|
||||
|
|
Loading…
Reference in New Issue