summaryrefslogtreecommitdiffstats
path: root/net/socket.c
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2016-01-08 17:37:20 +0100
committerDavid S. Miller <davem@davemloft.net>2016-01-11 04:56:29 +0100
commita78cb84c62c427807d917c5aa8797740f00b0bbe (patch)
tree99dbd793f182a509ed68d5542924fe99b9325187 /net/socket.c
parentipv6: always add flag an address that failed DAD with DADFAILED (diff)
downloadlinux-a78cb84c62c427807d917c5aa8797740f00b0bbe.tar.xz
linux-a78cb84c62c427807d917c5aa8797740f00b0bbe.zip
net: add scheduling point in recvmmsg/sendmmsg
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>
Diffstat (limited to 'net/socket.c')
-rw-r--r--net/socket.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/net/socket.c b/net/socket.c
index d730ef9dfbf0..91c2de6f5020 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -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: