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>
Showing
- arch/alpha/kernel/systbls.S 1 addition, 0 deletionsarch/alpha/kernel/systbls.S
- arch/arm/kernel/calls.S 1 addition, 0 deletionsarch/arm/kernel/calls.S
- arch/avr32/kernel/syscall_table.S 1 addition, 0 deletionsarch/avr32/kernel/syscall_table.S
- arch/blackfin/mach-common/entry.S 1 addition, 0 deletionsarch/blackfin/mach-common/entry.S
- arch/ia64/kernel/entry.S 1 addition, 0 deletionsarch/ia64/kernel/entry.S
- arch/microblaze/kernel/syscall_table.S 1 addition, 0 deletionsarch/microblaze/kernel/syscall_table.S
- arch/mips/kernel/scall32-o32.S 1 addition, 0 deletionsarch/mips/kernel/scall32-o32.S
- arch/mips/kernel/scall64-64.S 1 addition, 0 deletionsarch/mips/kernel/scall64-64.S
- arch/mips/kernel/scall64-n32.S 1 addition, 0 deletionsarch/mips/kernel/scall64-n32.S
- arch/mips/kernel/scall64-o32.S 1 addition, 0 deletionsarch/mips/kernel/scall64-o32.S
- arch/sh/kernel/syscalls_64.S 1 addition, 0 deletionsarch/sh/kernel/syscalls_64.S
- arch/sparc/kernel/systbls_32.S 1 addition, 1 deletionarch/sparc/kernel/systbls_32.S
- arch/sparc/kernel/systbls_64.S 2 additions, 2 deletionsarch/sparc/kernel/systbls_64.S
- arch/x86/ia32/ia32entry.S 1 addition, 0 deletionsarch/x86/ia32/ia32entry.S
- arch/x86/include/asm/unistd_32.h 2 additions, 1 deletionarch/x86/include/asm/unistd_32.h
- arch/x86/include/asm/unistd_64.h 2 additions, 0 deletionsarch/x86/include/asm/unistd_64.h
- arch/x86/kernel/syscall_table_32.S 1 addition, 0 deletionsarch/x86/kernel/syscall_table_32.S
- arch/xtensa/include/asm/unistd.h 3 additions, 1 deletionarch/xtensa/include/asm/unistd.h
- include/linux/net.h 1 addition, 0 deletionsinclude/linux/net.h
- include/linux/socket.h 10 additions, 0 deletionsinclude/linux/socket.h
Loading