Skip to content

Commit 67b62f9

Browse files
David Aherndavem330
authored andcommitted
net: dev: Improve debug statements for adjacency tracking
Adjacency code only has debugs for the insert case. Add debugs for the remove path and make both consistently worded to make it easier to follow the insert and removal with reference counts. In addition, change the BUG to a WARN_ON. A missing adjacency at removal time is not cause for a panic. Signed-off-by: David Ahern <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 0f524a8 commit 67b62f9

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

net/core/dev.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5561,6 +5561,9 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev,
55615561

55625562
if (adj) {
55635563
adj->ref_nr += 1;
5564+
pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d\n",
5565+
dev->name, adj_dev->name, adj->ref_nr);
5566+
55645567
return 0;
55655568
}
55665569

@@ -5574,8 +5577,8 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev,
55745577
adj->private = private;
55755578
dev_hold(adj_dev);
55765579

5577-
pr_debug("dev_hold for %s, because of link added from %s to %s\n",
5578-
adj_dev->name, dev->name, adj_dev->name);
5580+
pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d; dev_hold on %s\n",
5581+
dev->name, adj_dev->name, adj->ref_nr, adj_dev->name);
55795582

55805583
if (netdev_adjacent_is_neigh_list(dev, adj_dev, dev_list)) {
55815584
ret = netdev_adjacent_sysfs_add(dev, adj_dev, dev_list);
@@ -5614,17 +5617,22 @@ static void __netdev_adjacent_dev_remove(struct net_device *dev,
56145617
{
56155618
struct netdev_adjacent *adj;
56165619

5620+
pr_debug("Remove adjacency: dev %s adj_dev %s ref_nr %d\n",
5621+
dev->name, adj_dev->name, ref_nr);
5622+
56175623
adj = __netdev_find_adj(adj_dev, dev_list);
56185624

56195625
if (!adj) {
5620-
pr_err("tried to remove device %s from %s\n",
5626+
pr_err("Adjacency does not exist for device %s from %s\n",
56215627
dev->name, adj_dev->name);
5622-
BUG();
5628+
WARN_ON(1);
5629+
return;
56235630
}
56245631

56255632
if (adj->ref_nr > ref_nr) {
5626-
pr_debug("%s to %s ref_nr-%d = %d\n", dev->name, adj_dev->name,
5627-
ref_nr, adj->ref_nr-ref_nr);
5633+
pr_debug("adjacency: %s to %s ref_nr - %d = %d\n",
5634+
dev->name, adj_dev->name, ref_nr,
5635+
adj->ref_nr - ref_nr);
56285636
adj->ref_nr -= ref_nr;
56295637
return;
56305638
}
@@ -5636,7 +5644,7 @@ static void __netdev_adjacent_dev_remove(struct net_device *dev,
56365644
netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list);
56375645

56385646
list_del_rcu(&adj->list);
5639-
pr_debug("dev_put for %s, because link removed from %s to %s\n",
5647+
pr_debug("adjacency: dev_put for %s, because link removed from %s to %s\n",
56405648
adj_dev->name, dev->name, adj_dev->name);
56415649
dev_put(adj_dev);
56425650
kfree_rcu(adj, rcu);

0 commit comments

Comments
 (0)