Unverified Commit c04fe8e3 authored by Jens Axboe's avatar Jens Axboe Committed by Christian Brauner
Browse files

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: afed6271 ("pipe: set FMODE_NOWAIT on pipes")
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
Message-Id: <e5946d67-4e5e-b056-ba80-656bab12d9f6@kernel.dk>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent ac9a7868
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -342,7 +342,8 @@ 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 +548,8 @@ 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;