It's not enough to just check the file O_NONBLOCK flag, we should also check if the iocb being passed in has been flagged as non-blocking as well. Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> --- fs/pipe.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/pipe.c b/fs/pipe.c index 42c7ff41c2db..58fee8816564 100644 --- a/fs/pipe.c +++ b/fs/pipe.c @@ -342,7 +342,7 @@ pipe_read(struct kiocb *iocb, struct iov_iter *to) break; if (ret) break; - if (filp->f_flags & O_NONBLOCK) { + if (filp->f_flags & O_NONBLOCK || iocb->ki_flags & IOCB_NOWAIT) { ret = -EAGAIN; break; } @@ -547,7 +547,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from) continue; /* Wait for buffer space to become available. */ - if (filp->f_flags & O_NONBLOCK) { + if (filp->f_flags & O_NONBLOCK || iocb->ki_flags & IOCB_NOWAIT) { if (!ret) ret = -EAGAIN; break; -- 2.39.2