Arnaldo Carvalho de Melo a2e2725541 net: Introduce recvmmsg socket syscall
Meaning receive multiple messages, reducing the number of syscalls and
net stack entry/exit operations.

Next patches will introduce mechanisms where protocols that want to
optimize this operation will provide an unlocked_recvmsg operation.

This takes into account comments made by:

. Paul Moore: sock_recvmsg is called only for the first datagram,
  sock_recvmsg_nosec is used for the rest.

. Caitlin Bestler: recvmmsg now has a struct timespec timeout, that
  works in the same fashion as the ppoll one.

  If the underlying protocol returns a datagram with MSG_OOB set, this
  will make recvmmsg return right away with as many datagrams (+ the OOB
  one) it has received so far.

. Rémi Denis-Courmont & Steven Whitehouse: If we receive N < vlen
  datagrams and then recvmsg returns an error, recvmmsg will return
  the successfully received datagrams, store the error and return it
  in the next call.

This paves the way for a subsequent optimization, sk_prot->unlocked_recvmsg,
where we will be able to acquire the lock only at batch start and end, not at
every underlying recvmsg call.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2009-10-12 23:40:10 -07:00
..
2009-09-23 13:03:46 -05:00
2009-08-05 10:42:58 -07:00
2009-09-01 17:40:31 -07:00
2008-09-12 16:30:20 -07:00
2009-09-01 17:40:57 -07:00
2009-03-21 19:06:54 -07:00
2009-09-01 17:40:31 -07:00
2009-09-01 17:40:31 -07:00
2008-11-25 17:35:18 -08:00
2008-07-05 21:26:57 -07:00
2009-07-12 14:03:27 -07:00
2009-06-03 02:51:04 -07:00
2009-06-03 02:51:04 -07:00
2008-06-11 21:00:38 -07:00
2009-06-03 02:51:04 -07:00
2008-06-11 21:00:38 -07:00
2009-08-05 10:42:58 -07:00
2008-06-11 21:00:38 -07:00
2009-10-07 16:39:43 -04:00
2008-02-29 11:46:17 -08:00
2008-03-28 16:28:36 -07:00
2009-09-01 17:40:57 -07:00
2009-10-07 16:39:43 -04:00
2009-01-06 11:38:15 -07:00
2009-08-25 16:07:40 +02:00
2008-11-16 23:01:49 -08:00
2009-09-14 17:03:05 -07:00
2009-03-21 19:06:50 -07:00
2009-04-22 16:57:17 -04:00
2009-07-26 19:11:14 -07:00
2009-06-03 02:51:02 -07:00
2009-04-27 02:45:02 -07:00
2008-07-05 21:25:39 -07:00
2009-10-07 16:39:43 -04:00
2009-06-03 14:06:13 -04:00