pipe: check for IOCB_NOWAIT alongside O_NONBLOCK
Pipe reads or writes need to enable nonblocking attempts, if either
O_NONBLOCK is set on the file, or IOCB_NOWAIT is set in the iocb being
passed in. The latter isn't currently true, ensure we check for both
before waiting on data or space.
Fixes: afed6271f5
("pipe: set FMODE_NOWAIT on pipes")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Message-Id: <e5946d67-4e5e-b056-ba80-656bab12d9f6@kernel.dk>
Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
ac9a78681b
commit
c04fe8e32f
|
@ -342,7 +342,8 @@ pipe_read(struct kiocb *iocb, struct iov_iter *to)
|
||||||
break;
|
break;
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
break;
|
||||||
if (filp->f_flags & O_NONBLOCK) {
|
if ((filp->f_flags & O_NONBLOCK) ||
|
||||||
|
(iocb->ki_flags & IOCB_NOWAIT)) {
|
||||||
ret = -EAGAIN;
|
ret = -EAGAIN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -547,7 +548,8 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Wait for buffer space to become available. */
|
/* 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)
|
if (!ret)
|
||||||
ret = -EAGAIN;
|
ret = -EAGAIN;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue