From 560ddfa0035cd747c2f87d70aae2fe897dfef226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Wed, 24 Aug 2022 18:59:23 +0200 Subject: [PATCH] CLEANUP: quic: Remove a useless check in qc_lstnr_pkt_rcv() This function parses the QUIC packet from a UDP datagram. It was originally supposed to be run by several thread. Here we remove a section of code where the current thread checks there is not another thread which has already inserted the new quic_conn it is trying to insert in the connections tree. Must be backported to 2.6 to ease the future backports to come. --- src/xprt_quic.c | 31 +++++-------------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/src/xprt_quic.c b/src/xprt_quic.c index 2dbb4cba0..ffa2cba1f 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -5785,7 +5785,7 @@ static void qc_lstnr_pkt_rcv(unsigned char *buf, const unsigned char *end, struct quic_dgram *dgram, struct list **tasklist_head) { unsigned char *beg, *payload; - struct quic_conn *qc, *qc_to_purge = NULL; + struct quic_conn *qc; struct listener *l; struct proxy *prx; struct quic_counters *prx_counters; @@ -5976,7 +5976,6 @@ static void qc_lstnr_pkt_rcv(unsigned char *buf, const unsigned char *end, } if (!qc) { int ipv4; - struct ebmb_node *n = NULL; if (pkt->type != QUIC_PACKET_TYPE_INITIAL) { TRACE_PROTO("Non Initial packet", QUIC_EV_CONN_LPKT, NULL, NULL, NULL, qv); @@ -6019,31 +6018,11 @@ static void qc_lstnr_pkt_rcv(unsigned char *buf, const unsigned char *end, HA_ATOMIC_INC(&prx_counters->half_open_conn); /* Insert the DCID the QUIC client has chosen (only for listeners) */ - n = ebmb_insert(&quic_dghdlrs[tid].odcids, &qc->odcid_node, - qc->odcid.len + qc->odcid.addrlen); - - /* If the insertion failed, it means that another - * thread has already allocated a QUIC connection for - * the same CID. Liberate our allocated connection. - */ - if (unlikely(n != &qc->odcid_node)) { - qc_to_purge = qc; - - qc = ebmb_entry(n, struct quic_conn, odcid_node); - pkt->qc = qc; - } - - if (likely(!qc_to_purge)) { - /* Enqueue this packet. */ - pkt->qc = qc; - } - else { - quic_conn_release(qc_to_purge); - } - } - else { - pkt->qc = qc; + ebmb_insert(&quic_dghdlrs[tid].odcids, &qc->odcid_node, + qc->odcid.len + qc->odcid.addrlen); } + + pkt->qc = qc; } else { TRACE_PROTO("short header packet received", QUIC_EV_CONN_LPKT, qc);