Message ID | 1527521753-17963-2-git-send-email-laoar.shao@gmail.com |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
Series | [v3,net-next,1/2] tcp: use data length instead of skb->len in tcp_probe | expand |
On Mon, May 28, 2018 at 8:36 AM Yafang Shao <laoar.shao@gmail.com> wrote: > This is additional to the commit ea1627c20c34 ("tcp: minor optimizations around tcp_hdr() usage"). > At this point, skb->data is same with tcp_hdr() as tcp header has not > been pulled yet. > Cc: Eric Dumazet <edumazet@google.com> > Signed-off-by: Yafang Shao <laoar.shao@gmail.com> > --- > net/ipv4/tcp_ipv4.c | 2 +- > net/ipv6/tcp_ipv6.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c > index adbdb50..d179386 100644 > --- a/net/ipv4/tcp_ipv4.c > +++ b/net/ipv4/tcp_ipv4.c > @@ -1486,7 +1486,7 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) > sk->sk_rx_dst = NULL; > } > } > - tcp_rcv_established(sk, skb, tcp_hdr(skb)); > + tcp_rcv_established(sk, skb, (const struct tcphdr *)skb->data); > return 0; > } > diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c > index 7d47c2b..1c633ff 100644 > --- a/net/ipv6/tcp_ipv6.c > +++ b/net/ipv6/tcp_ipv6.c > @@ -1322,7 +1322,7 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) > } > } > - tcp_rcv_established(sk, skb, tcp_hdr(skb)); > + tcp_rcv_established(sk, skb, (const struct tcphdr *)skb->data); > if (opt_skb) > goto ipv6_pktoptions; > return 0; > -- > 1.8.3.1 I would rather remove the third parameter of tcp_rcv_established() instead of duplicating the cast.
On Tue, May 29, 2018 at 12:36 AM, Eric Dumazet <edumazet@google.com> wrote: > On Mon, May 28, 2018 at 8:36 AM Yafang Shao <laoar.shao@gmail.com> wrote: > >> This is additional to the commit ea1627c20c34 ("tcp: minor optimizations > around tcp_hdr() usage"). >> At this point, skb->data is same with tcp_hdr() as tcp header has not >> been pulled yet. > >> Cc: Eric Dumazet <edumazet@google.com> >> Signed-off-by: Yafang Shao <laoar.shao@gmail.com> >> --- >> net/ipv4/tcp_ipv4.c | 2 +- >> net/ipv6/tcp_ipv6.c | 2 +- >> 2 files changed, 2 insertions(+), 2 deletions(-) > >> diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c >> index adbdb50..d179386 100644 >> --- a/net/ipv4/tcp_ipv4.c >> +++ b/net/ipv4/tcp_ipv4.c >> @@ -1486,7 +1486,7 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff > *skb) >> sk->sk_rx_dst = NULL; >> } >> } >> - tcp_rcv_established(sk, skb, tcp_hdr(skb)); >> + tcp_rcv_established(sk, skb, (const struct tcphdr > *)skb->data); >> return 0; >> } > >> diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c >> index 7d47c2b..1c633ff 100644 >> --- a/net/ipv6/tcp_ipv6.c >> +++ b/net/ipv6/tcp_ipv6.c >> @@ -1322,7 +1322,7 @@ static int tcp_v6_do_rcv(struct sock *sk, struct > sk_buff *skb) >> } >> } > >> - tcp_rcv_established(sk, skb, tcp_hdr(skb)); >> + tcp_rcv_established(sk, skb, (const struct tcphdr > *)skb->data); >> if (opt_skb) >> goto ipv6_pktoptions; >> return 0; >> -- >> 1.8.3.1 > > > I would rather remove the third parameter of tcp_rcv_established() instead > of duplicating the cast. OK. And what about introducing a new helper tcp_hdr_fast() ? /* use it when tcp header has not been pulled yet */ static inline struct tcphdr *tcp_hdr_fast(const struct sk_buff *skb) { return (const struct tcphdr *)skb->data; } That could help us to use this optimized one instead of the original one if possilbe. Thanks Yafang
On 05/28/2018 05:41 PM, Yafang Shao wrote: > OK. > > And what about introducing a new helper tcp_hdr_fast() ? > > /* use it when tcp header has not been pulled yet */ > static inline struct tcphdr *tcp_hdr_fast(const struct sk_buff *skb) > > { > > return (const struct tcphdr *)skb->data; > > } > > > That could help us to use this optimized one instead of the original > one if possilbe. I would rather not add such macro... The call site needs to know what is going on, so having a macro like that would not help.
On Tue, May 29, 2018 at 12:53 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote: > > > On 05/28/2018 05:41 PM, Yafang Shao wrote: > >> OK. >> >> And what about introducing a new helper tcp_hdr_fast() ? >> >> /* use it when tcp header has not been pulled yet */ >> static inline struct tcphdr *tcp_hdr_fast(const struct sk_buff *skb) >> >> { >> >> return (const struct tcphdr *)skb->data; >> >> } >> >> >> That could help us to use this optimized one instead of the original >> one if possilbe. > > > I would rather not add such macro... > > The call site needs to know what is going on, so having a macro like that would not help. OK
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index adbdb50..d179386 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -1486,7 +1486,7 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) sk->sk_rx_dst = NULL; } } - tcp_rcv_established(sk, skb, tcp_hdr(skb)); + tcp_rcv_established(sk, skb, (const struct tcphdr *)skb->data); return 0; } diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 7d47c2b..1c633ff 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -1322,7 +1322,7 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) } } - tcp_rcv_established(sk, skb, tcp_hdr(skb)); + tcp_rcv_established(sk, skb, (const struct tcphdr *)skb->data); if (opt_skb) goto ipv6_pktoptions; return 0;
This is additional to the commit ea1627c20c34 ("tcp: minor optimizations around tcp_hdr() usage"). At this point, skb->data is same with tcp_hdr() as tcp header has not been pulled yet. Cc: Eric Dumazet <edumazet@google.com> Signed-off-by: Yafang Shao <laoar.shao@gmail.com> --- net/ipv4/tcp_ipv4.c | 2 +- net/ipv6/tcp_ipv6.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)