From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B7F9945A for ; Wed, 14 Feb 2024 03:38:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707881935; cv=none; b=nSEt9H1pfGFHUJKIhmW+BehnDsvpy39bH515eIH9MOYN0BxjJFqYHvrZSn4ggbZlO6g6W9ukplqK01cqy9qcJTQ6k9P2lHBvV+aSYpKcI2G5IxV6ooPYLdNbUHIwJHtm6Xlp1w6toZnFrSyv6MKt9dZ6zY8+DXeA29EcYl9X+6I= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707881935; c=relaxed/simple; bh=/xRk9VP67CdYncrwVJrBRitZSAcO6M3ZS+xcniuLcLM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=BHmB4c9+gt2Yle+bEhrFXoaJeHpuwiCJ27ZTOR3pmO9BaprothwKKh+TKx1p8TGKsEkaJVWLBfNVQg9SLTTG9rRA73YotJCCzQo+9k+D/5irVCtTXlFWw172ZSRCZAG8yb+ybu2QBGv6nvYtnmeazNvsfrLJFyKjStAuOrGdSsA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IwQDjEko; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="IwQDjEko" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 89137C433F1; Wed, 14 Feb 2024 03:38:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1707881935; bh=/xRk9VP67CdYncrwVJrBRitZSAcO6M3ZS+xcniuLcLM=; h=From:To:Cc:Subject:Date:From; b=IwQDjEko1jYlOMxuHlUMkWEoWpsy0NjY5dzti0gKJYM66HoZLOfeklMXbbPoG8cXT c4iZapzCUYYSbK2FjIofZ3dZM3tYaNv11o2Xa8dogJq9s/HZHBY50JBPgPE4Wwk0Fx yuR/P1hgKX0ZAFcOYV+B1BCTVb3VNzjxHqIMNDJd5Os5vMgciL7tSZh6XtZc0bMvOP 5IcTEWda1TltoJZn0koEDuW/xFTiAtzhF3Ug3euQGFHasj0/OFtszGkJb8/Zhfjast Oycoc/KYAvGNz3b7IW6uPqvdyH/wxURwFv+ThKgf3e/Np4iNDbV8hAVwcOXkXMn/A4 gFToaD8Q/yb2w== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, Jakub Kicinski , Marcelo Ricardo Leitner , Davide Caratti , jhs@mojatatu.com, xiyou.wangcong@gmail.com, jiri@resnulli.us, shmulik.ladkani@gmail.com Subject: [PATCH net v2 1/2] net/sched: act_mirred: use the backlog for mirred ingress Date: Tue, 13 Feb 2024 19:38:47 -0800 Message-ID: <20240214033848.981211-1-kuba@kernel.org> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The test Davide added in commit ca22da2fbd69 ("act_mirred: use the backlog for nested calls to mirred ingress") hangs our testing VMs every 10 or so runs, with the familiar tcp_v4_rcv -> tcp_v4_rcv deadlock reported by lockdep. In the past there was a concern that the backlog indirection will lead to loss of error reporting / less accurate stats. But the current workaround does not seem to address the issue. Fixes: 53592b364001 ("net/sched: act_mirred: Implement ingress actions") Cc: Marcelo Ricardo Leitner Suggested-by: Davide Caratti Link: https://lore.kernel.org/netdev/33dc43f587ec1388ba456b4915c75f02a8aae226.1663945716.git.dcaratti@redhat.com/ Signed-off-by: Jakub Kicinski --- CC: jhs@mojatatu.com CC: xiyou.wangcong@gmail.com CC: jiri@resnulli.us CC: shmulik.ladkani@gmail.com --- net/sched/act_mirred.c | 14 +++++--------- .../testing/selftests/net/forwarding/tc_actions.sh | 3 --- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c index 0a1a9e40f237..291d47c9eb69 100644 --- a/net/sched/act_mirred.c +++ b/net/sched/act_mirred.c @@ -232,18 +232,14 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla, return err; } -static bool is_mirred_nested(void) -{ - return unlikely(__this_cpu_read(mirred_nest_level) > 1); -} - -static int tcf_mirred_forward(bool want_ingress, struct sk_buff *skb) +static int +tcf_mirred_forward(bool at_ingress, bool want_ingress, struct sk_buff *skb) { int err; if (!want_ingress) err = tcf_dev_queue_xmit(skb, dev_queue_xmit); - else if (is_mirred_nested()) + else if (!at_ingress) err = netif_rx(skb); else err = netif_receive_skb(skb); @@ -319,9 +315,9 @@ static int tcf_mirred_to_dev(struct sk_buff *skb, struct tcf_mirred *m, skb_set_redirected(skb_to_send, skb_to_send->tc_at_ingress); - err = tcf_mirred_forward(want_ingress, skb_to_send); + err = tcf_mirred_forward(at_ingress, want_ingress, skb_to_send); } else { - err = tcf_mirred_forward(want_ingress, skb_to_send); + err = tcf_mirred_forward(at_ingress, want_ingress, skb_to_send); } if (err) { diff --git a/tools/testing/selftests/net/forwarding/tc_actions.sh b/tools/testing/selftests/net/forwarding/tc_actions.sh index b0f5e55d2d0b..589629636502 100755 --- a/tools/testing/selftests/net/forwarding/tc_actions.sh +++ b/tools/testing/selftests/net/forwarding/tc_actions.sh @@ -235,9 +235,6 @@ mirred_egress_to_ingress_tcp_test() check_err $? "didn't mirred redirect ICMP" tc_check_packets "dev $h1 ingress" 102 10 check_err $? "didn't drop mirred ICMP" - local overlimits=$(tc_rule_stats_get ${h1} 101 egress .overlimits) - test ${overlimits} = 10 - check_err $? "wrong overlimits, expected 10 got ${overlimits}" tc filter del dev $h1 egress protocol ip pref 100 handle 100 flower tc filter del dev $h1 egress protocol ip pref 101 handle 101 flower -- 2.43.0