Message ID | 20230307154533.11164-2-axboe@kernel.dk (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Make pipe honor IOCB_NOWAIT | expand |
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;
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@kernel.dk> --- fs/pipe.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)