From 7ca57d2b63a17de4e4ae87ce6bd4458d4d9c1637 Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Thu, 31 Dec 2020 22:04:43 +0000 Subject: [PATCH] aio: simplify read_events() Change wait_event_hrtimeout() to not call __wait_event_hrtimeout() if timeout == 0, this matches other _timeout() helpers in wait.h. This allows to simplify its only user, read_events(), it no longer needs to optimize the "until == 0" case by hand. Note: this patch doesn't use ___wait_cond_timeout because _hrtimeout() also differs in that it returns 0 if succeeds and -ETIME on timeout. Perhaps we should change this to make it fully compatible with other helpers. Link: http://lkml.kernel.org/r/20190607175413.GA29187@redhat.com Signed-off-by: Oleg Nesterov Reviewed-by: Andrew Morton Cc: Benjamin LaHaise Cc: Arnd Bergmann Cc: David Laight Cc: Deepa Dinamani Cc: "Eric W. Biederman" Cc: Eric Wong Cc: Peter Zijlstra Cc: Al Viro Signed-off-by: Andrew Morton --- fs/aio.c | 9 +++------ include/linux/wait.h | 4 ++-- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/fs/aio.c b/fs/aio.c index 1f32da13d39ee..d213be7b8a7e6 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -1289,12 +1289,9 @@ static long read_events(struct kioctx *ctx, long min_nr, long nr, * the ringbuffer empty. So in practice we should be ok, but it's * something to be aware of when touching this code. */ - if (until == 0) - aio_read_events(ctx, min_nr, nr, event, &ret); - else - wait_event_interruptible_hrtimeout(ctx->wait, - aio_read_events(ctx, min_nr, nr, event, &ret), - until); + wait_event_interruptible_hrtimeout(ctx->wait, + aio_read_events(ctx, min_nr, nr, event, &ret), + until); return ret; } diff --git a/include/linux/wait.h b/include/linux/wait.h index fe10e8570a522..cffb6f8d3b0b2 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h @@ -555,7 +555,7 @@ do { \ ({ \ int __ret = 0; \ might_sleep(); \ - if (!(condition)) \ + if (!(condition) && (timeout)) \ __ret = __wait_event_hrtimeout(wq_head, condition, timeout, \ TASK_UNINTERRUPTIBLE); \ __ret; \ @@ -581,7 +581,7 @@ do { \ ({ \ long __ret = 0; \ might_sleep(); \ - if (!(condition)) \ + if (!(condition) && (timeout)) \ __ret = __wait_event_hrtimeout(wq, condition, timeout, \ TASK_INTERRUPTIBLE); \ __ret; \ -- 2.50.1