]> git.baikalelectronics.ru Git - kernel.git/commitdiff
Merge tag 'for-5.19/io_uring-net-2022-05-22' of git://git.kernel.dk/linux-block
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 23 May 2022 19:51:04 +0000 (12:51 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 23 May 2022 19:51:04 +0000 (12:51 -0700)
Pull io_uring 'more data in socket' support from Jens Axboe:
 "To be able to fully utilize the 'poll first' support in the core
  io_uring branch, it's advantageous knowing if the socket was empty
  after a receive. This adds support for that"

* tag 'for-5.19/io_uring-net-2022-05-22' of git://git.kernel.dk/linux-block:
  io_uring: return hint on whether more data is available after receive
  tcp: pass back data left in socket after receive

1  2 
fs/io_uring.c
include/uapi/linux/io_uring.h

diff --cc fs/io_uring.c
index d9529275a03068514c075cf99ae61a5d4a3cb87c,20c5d29e5b6c9699c152c313d3c1c91f105e37f4..1015dd49e7e55dcf66931a5cbcd082b9e279e7b3
@@@ -6115,6 -5947,8 +6115,7 @@@ static int io_recvmsg(struct io_kiocb *
        struct io_async_msghdr iomsg, *kmsg;
        struct io_sr_msg *sr = &req->sr_msg;
        struct socket *sock;
 -      struct io_buffer *kbuf;
+       unsigned int cflags;
        unsigned flags;
        int ret, min_ret = 0;
        bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK;
        if (flags & MSG_WAITALL)
                min_ret = iov_iter_count(&kmsg->msg.msg_iter);
  
 -
 -      ret = __sys_recvmsg_sock(sock, &kmsg->msg, req->sr_msg.umsg,
 -                                      kmsg->uaddr, flags);
+       kmsg->msg.msg_get_inq = 1;
 +      ret = __sys_recvmsg_sock(sock, &kmsg->msg, sr->umsg, kmsg->uaddr, flags);
        if (ret < min_ret) {
                if (ret == -EAGAIN && force_nonblock)
                        return io_setup_async_msg(req, kmsg);
  
  static int io_recv(struct io_kiocb *req, unsigned int issue_flags)
  {
 -      struct io_buffer *kbuf;
        struct io_sr_msg *sr = &req->sr_msg;
        struct msghdr msg;
 -      void __user *buf = sr->buf;
        struct socket *sock;
        struct iovec iov;
+       unsigned int cflags;
        unsigned flags;
        int ret, min_ret = 0;
        bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK;
                goto out_free;
  
        msg.msg_name = NULL;
+       msg.msg_namelen = 0;
        msg.msg_control = NULL;
+       msg.msg_get_inq = 1;
+       msg.msg_flags = 0;
        msg.msg_controllen = 0;
-       msg.msg_namelen = 0;
        msg.msg_iocb = NULL;
-       msg.msg_flags = 0;
  
 -      flags = req->sr_msg.msg_flags;
 +      flags = sr->msg_flags;
        if (force_nonblock)
                flags |= MSG_DONTWAIT;
        if (flags & MSG_WAITALL)
Simple merge