Commit 85328240c625f322af9f69c7b60e619717101d77
Committed by
Jeff Kirsher
1 parent
781069279f
Exists in
master
and in
16 other branches
net: allow netdev_all_upper_get_next_dev_rcu with rtnl lock held
It is useful to be able to walk all upper devices when bringing a device online where the RTNL lock is held. In this case it is safe to walk the all_adj_list because the RTNL lock is used to protect the write side as well. This patch adds a check to see if the rtnl lock is held before throwing a warning in netdev_all_upper_get_next_dev_rcu(). Also because we now have a call site for lockdep_rtnl_is_held() outside COFIG_LOCK_PROVING an inline definition returning 1 is needed. Similar to the rcu_read_lock_is_held(). Fixes: 2a47fa45d4df ("ixgbe: enable l2 forwarding acceleration for macvlans") CC: Veaceslav Falico <vfalico@redhat.com> Reported-by: Yuanhan Liu <yuanhan.liu@linux.intel.com> Signed-off-by: John Fastabend <john.r.fastabend@intel.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Showing 2 changed files with 6 additions and 1 deletions Side-by-side Diff
include/linux/rtnetlink.h
net/core/dev.c
... | ... | @@ -4500,7 +4500,7 @@ |
4500 | 4500 | { |
4501 | 4501 | struct netdev_adjacent *upper; |
4502 | 4502 | |
4503 | - WARN_ON_ONCE(!rcu_read_lock_held()); | |
4503 | + WARN_ON_ONCE(!rcu_read_lock_held() && !lockdep_rtnl_is_held()); | |
4504 | 4504 | |
4505 | 4505 | upper = list_entry_rcu((*iter)->next, struct netdev_adjacent, list); |
4506 | 4506 |