[NET] Generalise TCP's struct open_request minisock infrastructure
authorArnaldo Carvalho de Melo <acme@ghostprotocols.net>
Sun, 19 Jun 2005 05:46:52 +0000 (22:46 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 19 Jun 2005 05:46:52 +0000 (22:46 -0700)
commit2e6599cb899ba4b133f42cbf9d2b1883d2dc583a
treeb5d4fcca4d2a515fc3d3d20cefaaeebd8dbf661f
parent1944972d3bb651474a5021c9da8d0166ae19f1eb
[NET] Generalise TCP's struct open_request minisock infrastructure

Kept this first changeset minimal, without changing existing names to
ease peer review.

Basicaly tcp_openreq_alloc now receives the or_calltable, that in turn
has two new members:

->slab, that replaces tcp_openreq_cachep
->obj_size, to inform the size of the openreq descendant for
  a specific protocol

The protocol specific fields in struct open_request were moved to a
class hierarchy, with the things that are common to all connection
oriented PF_INET protocols in struct inet_request_sock, the TCP ones
in tcp_request_sock, that is an inet_request_sock, that is an
open_request.

I.e. this uses the same approach used for the struct sock class
hierarchy, with sk_prot indicating if the protocol wants to use the
open_request infrastructure by filling in sk_prot->rsk_prot with an
or_calltable.

Results? Performance is improved and TCP v4 now uses only 64 bytes per
open request minisock, down from 96 without this patch :-)

Next changeset will rename some of the structs, fields and functions
mentioned above, struct or_calltable is way unclear, better name it
struct request_sock_ops, s/struct open_request/struct request_sock/g,
etc.

Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
16 files changed:
include/linux/ip.h
include/linux/ipv6.h
include/linux/tcp.h
include/net/request_sock.h [new file with mode: 0644]
include/net/sock.h
include/net/tcp.h
include/net/tcp_ecn.h
net/core/sock.c
net/ipv4/syncookies.c
net/ipv4/tcp.c
net/ipv4/tcp_diag.c
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_minisocks.c
net/ipv4/tcp_output.c
net/ipv4/tcp_timer.c
net/ipv6/tcp_ipv6.c