net: add scheduling point in recvmmsg/sendmmsg
authorEric Dumazet <edumazet@google.com>
Fri, 8 Jan 2016 16:37:20 +0000 (08:37 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 11 Jan 2016 03:56:29 +0000 (22:56 -0500)
Applications often have to reduce number of datagrams
they receive or send per system call to avoid starvation problems.

Really the kernel should take care of this by using cond_resched(),
so that applications can experiment bigger batch sizes.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/socket.c

index d730ef9dfbf02aba150d5229a0d2875ddc23aa4d..91c2de6f50205ae955afa1a41ad9502d35853c05 100644 (file)
@@ -2041,6 +2041,7 @@ int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
                if (err)
                        break;
                ++datagrams;
+               cond_resched();
        }
 
        fput_light(sock->file, fput_needed);
@@ -2236,6 +2237,7 @@ int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
                /* Out of band data, return right away */
                if (msg_sys.msg_flags & MSG_OOB)
                        break;
+               cond_resched();
        }
 
 out_put: