mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 12:52:29 -04:00
net: fib_rules: Drop RTNL assertions.
Now, fib_rule structs are protected by per-fib_rules_ops mutex. Let's drop ASSERT_RTNL_NET() and rtnl_dereference(). Note that fib_rules_event() iterates over net->rules_ops without net->rules_mod_lock, but this is fine because all fib_rule users are built-in and concurrent fib_rules_unregister() does not happen. Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com> Link: https://patch.msgid.link/20260629181226.1929658-8-kuniyu@google.com Reviewed-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
a7e87ee409
commit
facce49f29
@@ -387,7 +387,6 @@ static int call_fib_rule_notifiers(struct net *net,
|
||||
.rule = rule,
|
||||
};
|
||||
|
||||
ASSERT_RTNL_NET(net);
|
||||
lockdep_assert_held(&ops->lock);
|
||||
|
||||
/* Paired with READ_ONCE() in fib_rules_seq() */
|
||||
@@ -955,7 +954,7 @@ int fib_newrule(struct net *net, struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
list_for_each_entry(r, &ops->rules_list, list) {
|
||||
if (r->action == FR_ACT_GOTO &&
|
||||
r->target == rule->pref &&
|
||||
rtnl_dereference(r->ctarget) == NULL) {
|
||||
!rcu_access_pointer(r->ctarget)) {
|
||||
rcu_assign_pointer(r->ctarget, rule);
|
||||
if (--ops->unresolved_rules == 0)
|
||||
break;
|
||||
@@ -1064,7 +1063,7 @@ int fib_delrule(struct net *net, struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
|
||||
if (rule->action == FR_ACT_GOTO) {
|
||||
ops->nr_goto_rules--;
|
||||
if (rtnl_dereference(rule->ctarget) == NULL)
|
||||
if (!rcu_access_pointer(rule->ctarget))
|
||||
ops->unresolved_rules--;
|
||||
}
|
||||
|
||||
@@ -1082,7 +1081,7 @@ int fib_delrule(struct net *net, struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
if (&n->list == &ops->rules_list || n->pref != rule->pref)
|
||||
n = NULL;
|
||||
list_for_each_entry(r, &ops->rules_list, list) {
|
||||
if (rtnl_dereference(r->ctarget) != rule)
|
||||
if (rcu_access_pointer(r->ctarget) != rule)
|
||||
continue;
|
||||
rcu_assign_pointer(r->ctarget, n);
|
||||
if (!n)
|
||||
@@ -1400,8 +1399,6 @@ static int fib_rules_event(struct notifier_block *this, unsigned long event,
|
||||
struct net *net = dev_net(dev);
|
||||
struct fib_rules_ops *ops;
|
||||
|
||||
ASSERT_RTNL();
|
||||
|
||||
switch (event) {
|
||||
case NETDEV_REGISTER:
|
||||
list_for_each_entry(ops, &net->rules_ops, list) {
|
||||
|
||||
Reference in New Issue
Block a user