Message ID | 20240221025732.68157-11-kerneljasonxing@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | introduce drop reasons for tcp receive path | expand |
On Wed, Feb 21, 2024 at 3:58 AM Jason Xing <kerneljasonxing@gmail.com> wrote: > > From: Jason Xing <kernelxing@tencent.com> > > It's time to let it work right now. We've already prepared for this:) > > Signed-off-by: Jason Xing <kernelxing@tencent.com> > -- > v7 > Link: https://lore.kernel.org/all/20240219043815.98410-1-kuniyu@amazon.com/ > 1. adjust the related part of code only since patch [04/11] is changed. > --- > net/ipv4/tcp_ipv4.c | 16 ++++++++++------ > net/ipv6/tcp_ipv6.c | 20 +++++++++++++------- > 2 files changed, 23 insertions(+), 13 deletions(-) > > diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c > index c79e25549972..c886c671fae9 100644 > --- a/net/ipv4/tcp_ipv4.c > +++ b/net/ipv4/tcp_ipv4.c > @@ -1917,7 +1917,8 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) > if (!nsk) > return 0; > if (nsk != sk) { > - if (tcp_child_process(sk, nsk, skb)) { > + reason = tcp_child_process(sk, nsk, skb); > + if (reason) { > rsk = nsk; > goto reset; > } > @@ -2276,12 +2277,15 @@ int tcp_v4_rcv(struct sk_buff *skb) > if (nsk == sk) { > reqsk_put(req); > tcp_v4_restore_cb(skb); > - } else if (tcp_child_process(sk, nsk, skb)) { > - tcp_v4_send_reset(nsk, skb); > - goto discard_and_relse; > } else { > - sock_put(sk); > - return 0; > + drop_reason = tcp_child_process(sk, nsk, skb); > + if (drop_reason) { > + tcp_v4_send_reset(nsk, skb); > + goto discard_and_relse; > + } else { No need for else after a goto (or a return) > + sock_put(sk); > + return 0; > + } > } > } > > diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c > index 4f8464e04b7f..f260c28e5b18 100644 > --- a/net/ipv6/tcp_ipv6.c > +++ b/net/ipv6/tcp_ipv6.c > @@ -1654,8 +1654,11 @@ int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) > struct sock *nsk = tcp_v6_cookie_check(sk, skb); > > if (nsk != sk) { > - if (nsk && tcp_child_process(sk, nsk, skb)) > - goto reset; > + if (nsk) { > + reason = tcp_child_process(sk, nsk, skb); > + if (reason) > + goto reset; > + } > if (opt_skb) > __kfree_skb(opt_skb); > return 0; > @@ -1854,12 +1857,15 @@ INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb) > if (nsk == sk) { > reqsk_put(req); > tcp_v6_restore_cb(skb); > - } else if (tcp_child_process(sk, nsk, skb)) { > - tcp_v6_send_reset(nsk, skb); > - goto discard_and_relse; > } else { > - sock_put(sk); > - return 0; > + drop_reason = tcp_child_process(sk, nsk, skb); > + if (drop_reason) { > + tcp_v6_send_reset(nsk, skb); > + goto discard_and_relse; > + } else { Same here > + sock_put(sk); > + return 0; > + } > } > } > > -- > 2.37.3 >
On Wed, Feb 21, 2024 at 10:44 PM Eric Dumazet <edumazet@google.com> wrote: > > On Wed, Feb 21, 2024 at 3:58 AM Jason Xing <kerneljasonxing@gmail.com> wrote: > > > > From: Jason Xing <kernelxing@tencent.com> > > > > It's time to let it work right now. We've already prepared for this:) > > > > Signed-off-by: Jason Xing <kernelxing@tencent.com> > > -- > > v7 > > Link: https://lore.kernel.org/all/20240219043815.98410-1-kuniyu@amazon.com/ > > 1. adjust the related part of code only since patch [04/11] is changed. > > --- > > net/ipv4/tcp_ipv4.c | 16 ++++++++++------ > > net/ipv6/tcp_ipv6.c | 20 +++++++++++++------- > > 2 files changed, 23 insertions(+), 13 deletions(-) > > > > diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c > > index c79e25549972..c886c671fae9 100644 > > --- a/net/ipv4/tcp_ipv4.c > > +++ b/net/ipv4/tcp_ipv4.c > > @@ -1917,7 +1917,8 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) > > if (!nsk) > > return 0; > > if (nsk != sk) { > > - if (tcp_child_process(sk, nsk, skb)) { > > + reason = tcp_child_process(sk, nsk, skb); > > + if (reason) { > > rsk = nsk; > > goto reset; > > } > > @@ -2276,12 +2277,15 @@ int tcp_v4_rcv(struct sk_buff *skb) > > if (nsk == sk) { > > reqsk_put(req); > > tcp_v4_restore_cb(skb); > > - } else if (tcp_child_process(sk, nsk, skb)) { > > - tcp_v4_send_reset(nsk, skb); > > - goto discard_and_relse; > > } else { > > - sock_put(sk); > > - return 0; > > + drop_reason = tcp_child_process(sk, nsk, skb); > > + if (drop_reason) { > > + tcp_v4_send_reset(nsk, skb); > > + goto discard_and_relse; > > + } else { > > No need for else after a goto (or a return) Thanks, I will do it soon. > > > + sock_put(sk); > > + return 0; > > + } > > } > > } > > > > diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c > > index 4f8464e04b7f..f260c28e5b18 100644 > > --- a/net/ipv6/tcp_ipv6.c > > +++ b/net/ipv6/tcp_ipv6.c > > @@ -1654,8 +1654,11 @@ int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) > > struct sock *nsk = tcp_v6_cookie_check(sk, skb); > > > > if (nsk != sk) { > > - if (nsk && tcp_child_process(sk, nsk, skb)) > > - goto reset; > > + if (nsk) { > > + reason = tcp_child_process(sk, nsk, skb); > > + if (reason) > > + goto reset; > > + } > > if (opt_skb) > > __kfree_skb(opt_skb); > > return 0; > > @@ -1854,12 +1857,15 @@ INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb) > > if (nsk == sk) { > > reqsk_put(req); > > tcp_v6_restore_cb(skb); > > - } else if (tcp_child_process(sk, nsk, skb)) { > > - tcp_v6_send_reset(nsk, skb); > > - goto discard_and_relse; > > } else { > > - sock_put(sk); > > - return 0; > > + drop_reason = tcp_child_process(sk, nsk, skb); > > + if (drop_reason) { > > + tcp_v6_send_reset(nsk, skb); > > + goto discard_and_relse; > > + } else { > > > Same here Got it. > > > + sock_put(sk); > > + return 0; > > + } > > } > > } > > > > -- > > 2.37.3 > >
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index c79e25549972..c886c671fae9 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -1917,7 +1917,8 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) if (!nsk) return 0; if (nsk != sk) { - if (tcp_child_process(sk, nsk, skb)) { + reason = tcp_child_process(sk, nsk, skb); + if (reason) { rsk = nsk; goto reset; } @@ -2276,12 +2277,15 @@ int tcp_v4_rcv(struct sk_buff *skb) if (nsk == sk) { reqsk_put(req); tcp_v4_restore_cb(skb); - } else if (tcp_child_process(sk, nsk, skb)) { - tcp_v4_send_reset(nsk, skb); - goto discard_and_relse; } else { - sock_put(sk); - return 0; + drop_reason = tcp_child_process(sk, nsk, skb); + if (drop_reason) { + tcp_v4_send_reset(nsk, skb); + goto discard_and_relse; + } else { + sock_put(sk); + return 0; + } } } diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 4f8464e04b7f..f260c28e5b18 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -1654,8 +1654,11 @@ int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) struct sock *nsk = tcp_v6_cookie_check(sk, skb); if (nsk != sk) { - if (nsk && tcp_child_process(sk, nsk, skb)) - goto reset; + if (nsk) { + reason = tcp_child_process(sk, nsk, skb); + if (reason) + goto reset; + } if (opt_skb) __kfree_skb(opt_skb); return 0; @@ -1854,12 +1857,15 @@ INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb) if (nsk == sk) { reqsk_put(req); tcp_v6_restore_cb(skb); - } else if (tcp_child_process(sk, nsk, skb)) { - tcp_v6_send_reset(nsk, skb); - goto discard_and_relse; } else { - sock_put(sk); - return 0; + drop_reason = tcp_child_process(sk, nsk, skb); + if (drop_reason) { + tcp_v6_send_reset(nsk, skb); + goto discard_and_relse; + } else { + sock_put(sk); + return 0; + } } }