diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2007-04-19 23:29:13 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-26 01:26:28 -0400 |
commit | 27a884dc3cb63b93c2b3b643f5b31eed5f8a4d26 (patch) | |
tree | 5a267e40f9b94014be38dad5de0a52b6628834e0 /net/sched/cls_u32.c | |
parent | be8bd86321fa7f06359d866ef61fb4d2f3e9dce9 (diff) |
[SK_BUFF]: Convert skb->tail to sk_buff_data_t
So that it is also an offset from skb->head, reduces its size from 8 to 4 bytes
on 64bit architectures, allowing us to combine the 4 bytes hole left by the
layer headers conversion, reducing struct sk_buff size to 256 bytes, i.e. 4
64byte cachelines, and since the sk_buff slab cache is SLAB_HWCACHE_ALIGN...
:-)
Many calculations that previously required that skb->{transport,network,
mac}_header be first converted to a pointer now can be done directly, being
meaningful as offsets or pointers.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/cls_u32.c')
-rw-r--r-- | net/sched/cls_u32.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 695b34051b9f..fa11bb750049 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c | |||
@@ -213,7 +213,7 @@ check_terminal: | |||
213 | off2 = 0; | 213 | off2 = 0; |
214 | } | 214 | } |
215 | 215 | ||
216 | if (ptr < skb->tail) | 216 | if (ptr < skb_tail_pointer(skb)) |
217 | goto next_ht; | 217 | goto next_ht; |
218 | } | 218 | } |
219 | 219 | ||
@@ -718,7 +718,7 @@ static int u32_dump(struct tcf_proto *tp, unsigned long fh, | |||
718 | struct sk_buff *skb, struct tcmsg *t) | 718 | struct sk_buff *skb, struct tcmsg *t) |
719 | { | 719 | { |
720 | struct tc_u_knode *n = (struct tc_u_knode*)fh; | 720 | struct tc_u_knode *n = (struct tc_u_knode*)fh; |
721 | unsigned char *b = skb->tail; | 721 | unsigned char *b = skb_tail_pointer(skb); |
722 | struct rtattr *rta; | 722 | struct rtattr *rta; |
723 | 723 | ||
724 | if (n == NULL) | 724 | if (n == NULL) |
@@ -765,7 +765,7 @@ static int u32_dump(struct tcf_proto *tp, unsigned long fh, | |||
765 | #endif | 765 | #endif |
766 | } | 766 | } |
767 | 767 | ||
768 | rta->rta_len = skb->tail - b; | 768 | rta->rta_len = skb_tail_pointer(skb) - b; |
769 | if (TC_U32_KEY(n->handle)) | 769 | if (TC_U32_KEY(n->handle)) |
770 | if (tcf_exts_dump_stats(skb, &n->exts, &u32_ext_map) < 0) | 770 | if (tcf_exts_dump_stats(skb, &n->exts, &u32_ext_map) < 0) |
771 | goto rtattr_failure; | 771 | goto rtattr_failure; |