io_uring: don't use poll handler if file can't be nonblocking read/written
Jens Axboe
maintainerPATCH 1/1 io_uring: don't use poll handler if file can't be nonblocking read/written
There's no point in using the poll handler if we can't do a nonblocking IO attempt of the operation, since we'll need to go async anyway. In fact this is actively harmful, as reading from eg pipes won't return 0 to indicate EOF.
Cc [email protected] # v5.7+
Signed-off-by Jens Axboe <[email protected]>
---
fs/io_uring.c +9 -1
@@ -4889,12 +4889,20 @@ static bool io_arm_poll_handler(struct io_kiocb *req)struct async_poll *apoll;struct io_poll_table ipt;__poll_t mask, ret; +int rw;if (!req->file || !file_can_poll (req->file))return false;if (req->flags &REQ_F_POLLED )return false; -if (!def->pollin && !def->pollout) +if (def->pollin) + rw =READ ; +else if (def->pollout) + rw =WRITE ; +else +return false; +/* if we can't nonblock try, then no point in arming a poll handler */ +if (!io_file_supports_async (req->file, rw))return false; apoll =kmalloc (sizeof (*apoll),GFP_ATOMIC );
Signature · 1 line
Jens Axboe