mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
io_uring: add sockets to list of files that support non-blocking issue
In chasing a performance issue between using IORING_OP_RECVMSG and IORING_OP_READV on sockets, tracing showed that we always punt the socket reads to async offload. This is due to io_file_supports_async() not checking for S_ISSOCK on the inode. Since sockets supports the O_NONBLOCK (or MSG_DONTWAIT) flag just fine, add sockets to the list of file types that we can do a non-blocking issue to. Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
ebfcd8955c
commit
10d5934557
@ -1431,7 +1431,7 @@ static bool io_file_supports_async(struct file *file)
|
||||
{
|
||||
umode_t mode = file_inode(file)->i_mode;
|
||||
|
||||
if (S_ISBLK(mode) || S_ISCHR(mode))
|
||||
if (S_ISBLK(mode) || S_ISCHR(mode) || S_ISSOCK(mode))
|
||||
return true;
|
||||
if (S_ISREG(mode) && file->f_op != &io_uring_fops)
|
||||
return true;
|
||||
@ -1867,7 +1867,9 @@ static int io_write(struct io_kiocb *req, struct io_kiocb **nxt,
|
||||
goto copy_iov;
|
||||
}
|
||||
|
||||
if (force_nonblock && !(kiocb->ki_flags & IOCB_DIRECT))
|
||||
/* file path doesn't support NOWAIT for non-direct_IO */
|
||||
if (force_nonblock && !(kiocb->ki_flags & IOCB_DIRECT) &&
|
||||
(req->flags & REQ_F_ISREG))
|
||||
goto copy_iov;
|
||||
|
||||
iov_count = iov_iter_count(&iter);
|
||||
|
Loading…
Reference in New Issue
Block a user